Reputation: 3
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
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
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