getElementsByTagName'未定义'在Firefox和Chrome中

getElementsByTagName 'undefined' in Firefox and Chrome?

本文关键字:Chrome 未定义 getElementsByTagName Firefox      更新时间:2024-05-25

我的getElementsByTagName有问题。我正在尝试使用ajax从服务器接收的xml文件中提取信息。在IE中,它运行得很好,但当我尝试在Chrome或FireFox上运行它时,我会得到一个"未定义"。

Javascript:

function parseMessage()
{
    doc = request.responseXML;
    sum = "";
    for (var i=0; i< doc.getElementsByTagName('coupon').length; i=i+1)
    {
        var lat2 = doc.documentElement.getElementsByTagName('latitude').item(i).text;
        var longi2 = doc.documentElement.getElementsByTagName('longitude').item(i).text;
        var latlng  = new google.maps.LatLng( lat2 , longi2 ); 
        var product =  doc.documentElement.getElementsByTagName('productname').item(i).text;
        // marker[i] = createMarker(map2, product, latlng, description);
        sum = sum + description+ " "+ product + lat2 + longi2;                          
    }
    document.write(sum);
}           

XML:

<?xml version="1.0" encoding="UTF-8"?>
-<coupons>
-<coupon id="1">
<productname>Bigmac</productname>
<companyname>Macdonalds</companyname>
<latitude>32.015954</latitude>
<longitude>34.755228</longitude>
</coupon>
-<coupon id="2">
<productname>Crocs</productname>
<companyname>Crocs</companyname>
<latitude>32.079375</latitude>
<longitude>34.769325</longitude>
</coupon>
-<coupon id="3">
<productname>Nike Shoks</productname>
<companyname>NIKE</companyname>
<latitude>32.048825</latitude>
<longitude>34.785461</longitude>
</coupon>
-<coupon id="4">
.....

第一个问题是getElementsByTagName()返回元素列表;不能作为一个组操作,所以你必须选择一个特定的节点来工作:

getElementsByTagName('latitude')[0]; // for the first element.

第二个问题是:

getElementsByTagName('latitude')[0].item(i);

应该用于访问特定元素的属性或属性,而item(i)既不是,也不是

如果您试图访问元素的一个子元素(在您发布的代码中,latitude元素没有任何子元素),您可以使用:

getElementsByTagName('latitude')[0].childNodes[i];

并且text()不会以纯JavaScript返回或执行任何操作。如果您使用的是jQuery text()方法,那么它只适用于jQuery对象,如果您试图访问当前节点的文本内容,那么:

getElementsByTagName('latitude')[0].textContent; // for Firefox, Chrome...

或者:

getElementsByTagName('latitude')[0].innerText; // for IE