SCRIPT5007 IE9 getElementsByTagName - PullRequest
       0

SCRIPT5007 IE9 getElementsByTagName

0 голосов
/ 11 июля 2011

Почему эта простая вещь не работает в IE 9?Он отлично работает в FF и 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>joe@joe.com</email>
</BusinessCard>
</xml>

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

Не удается с "xmldata.getElementsByTagName (" BusinessCard ") [0];"с нулевым результатом для bizCard.

Ответы [ 2 ]

3 голосов
/ 30 декабря 2011

Я знаю, что это немного поздно, но у меня возникла похожая проблема, и вы можете подумать о том, чтобы обернуть ваш код xml в div, а затем инициализировать его как документ xml после:

<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>joe@joe.com</email>
    </BusinessCard>
</div>

затем в вашей функции используйте объект DOMParser для создания XML-документа:

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);
}

Надеюсь, это поможет. Главное, на что я обращаю внимание, это то, что вы можете создать действительный объект xml из строки.

И последнее, это плохая практика - использовать javascript: function () в вашем теге A

0 голосов
/ 11 июля 2011

Я думаю, это потому, что в IE элементы с нестандартным именем тега не могут содержать другие элементы.

Попробуйте один раз xmldata.canHaveChildren, он должен вернуть false.

...