Irina
Irina

Reputation: 3

SCRIPT5007 IE9 getElementsByTagName

Why is this simple thing not working in IE 9? It works just fine i FF and Chrome.

<script language="javascript" type="text/javascript">
    function displayBusinessCardData() {
        var xmldata = document.getElementById("xmldata1");
        var bizCard = xmldata.getElementsByTagName("BusinessCard")[0];

        var name = "Name: " +  bizCard.getElementsByTagName("name")[0].firstChild.data;
        var phone1 = "Phone: " +  bizCard.getElementsByTagName("phone")[0].firstChild.data;
        var phone2 = "Phone: " + bizCard.getElementsByTagName("phone")[1].firstChild.data;
        var phone3 = "Phone: " + bizCard.getElementsByTagName("phone")[2].firstChild.data;
        var email = "Email: " + bizCard.getElementsByTagName("email")[0].firstChild.data;

        alert("BusinessCard Data: \n\n" + name + "\n" + phone1 + "\n" + phone2 + "\n" + phone3 + "\n" + email);
    }
</script>

<xml id="xmldata1" style="display:none">
<BusinessCard>
    <name>Joe Marini</Name>
    <phone type="mobile">(415) 555-4567</phone>
    <phone type="work">(800) 555-9876</phone>
    <phone type="fax">(510) 555-1234</phone>
    <email>[email protected]</email>
</BusinessCard>
</xml>

<a href="javascript:displayBusinessCardData()">Show Business Card Data</a>
</body>

It fails with "xmldata.getElementsByTagName("BusinessCard")[0];" with the result being null for bizCard.

Upvotes: 0

Views: 3346

Answers (2)

Noir
Noir

Reputation: 31

I know this is a bit late, but I was experiencing a similar problem, and you may want to consider wrapping your xml code in a div, then initializing it as an xml document after:

<div id="xmldata">
    <BusinessCard>
        <name>Joe Marini</Name>
        <phone type="mobile">(415) 555-4567</phone>
        <phone type="work">(800) 555-9876</phone>
        <phone type="fax">(510) 555-1234</phone>
        <email>[email protected]</email>
    </BusinessCard>
</div>

then in your function use a DOMParser object to create an xml document:

function displayBusinessCardData() {
    var xmlstring= document.getElementById("xmldata").innerHTML;
    parser=new DOMParser();
    var bizCard = parser.parseFromString(xmlstring,"text/xml");

    var name = "Name: " +  bizCard.getElementsByTagName("name")[0].firstChild.data;
    var phone1 = "Phone: " +  bizCard.getElementsByTagName("phone")[0].firstChild.data;
    var phone2 = "Phone: " + bizCard.getElementsByTagName("phone")[1].firstChild.data;
    var phone3 = "Phone: " + bizCard.getElementsByTagName("phone")[2].firstChild.data;
    var email = "Email: " + bizCard.getElementsByTagName("email")[0].firstChild.data;

    alert("BusinessCard Data: \n\n" + name + "\n" + phone1 + "\n" + phone2 + "\n" + phone3 + "\n" + email);
}

Hope this helps. The main thing I'm getting at is, you can make a valid xml object from a string.

One last thing, it's bad practice use javascript:function() protocol in your A tag

Upvotes: 3

Luc125
Luc125

Reputation: 5857

I think it is because in IE, elements with a non-standard tag name cannot contain other elements.

Try once xmldata.canHaveChildren, it should return false.

Upvotes: 0

Related Questions