Emi*_*Adz 1 javascript xml html5 xml-parsing getelementsbytagname
我遇到了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);
}
Run Code Online (Sandbox Code Playgroud)
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">
.....
Run Code Online (Sandbox Code Playgroud)
第一个问题是getElementsByTagName()
返回元素列表; 它不能作为一个组进行操作,因此您必须选择要工作的特定节点:
getElementsByTagName('latitude')[0]; // for the first element.
Run Code Online (Sandbox Code Playgroud)
第二个问题是:
getElementsByTagName('latitude')[0].item(i);
Run Code Online (Sandbox Code Playgroud)
应该用来访问特定元素的属性,或属性,以及item(i)
是没有,尽管它可以设置/使用的地方,我们没有看到.
如果您尝试访问该元素的某个子元素(并且在您发布的代码中latitude
元素没有任何子元素),您可以使用:
getElementsByTagName('latitude')[0].childNodes[i];
Run Code Online (Sandbox Code Playgroud)
并且text()
不会以简单的JavaScript返回或执行任何操作.如果您正在使用jQuery text()
方法,那么只适用于jQuery对象,如果您尝试访问当前节点的文本内容,则:
getElementsByTagName('latitude')[0].textContent; // for Firefox, Chrome...
Run Code Online (Sandbox Code Playgroud)
要么:
getElementsByTagName('latitude')[0].innerText; // for IE
Run Code Online (Sandbox Code Playgroud)