我已经阅读了有关的所有文档element.children
(例如MDN),但无法在Google Chrome浏览器上正常运行。我正在使用的代码段:
<html><head>
<script src="loadxmldoc.js"></script>
</head>
<body><script>
xmlDoc=loadXMLDoc("books.xml");
document.write("<table border='1'>");
var x=xmlDoc.getElementsByTagName("day");
for (var i=0;i<x.length;i++){
document.write("<td><table border='1'>");
document.write("<tr><td>" + x[i].getAttribute("id") + "</td></tr>");
var y=xmlDoc.getElementsByTagName("time");
for (var j=0;j<y.length;j++){
document.write("<tr><td><table border='1'>");
document.write("<tr><td>Location: " + y[j].getAttribute("id") + ": ");
document.write("</table></td></tr>");
}
document.write("</table></td>");
}
document.write("</table>");
</script></body></html>
问题是,每次getElementsByTagName
使y.length
16,而不是3,3,3,3,1。我确实使用过childNodes
,但是其中包括文本元素。我曾经使用过,var y=x.item(i).children;
但是在Chrome上无法使用。它确实可以在FF上运行,这使我相信Chrome不支持它,或者我脑子里缺少东西。但是,我发现的所有文档都说这应该适用于Chrome。
这.children
是Chrome的正确用法还是Chrome出了点问题?
我要感谢@Felix Kling为我提供的答案。
仅供参考,.item在FF中工作的原因是FF返回HTMLCollection,而Chrome返回NodeList。–费利克斯·克林(Felix Kling)
.children
仅适用于HTMLCollection。NodeList需要手动完成。我挑选出元素节点并将它们放入数组中。
var x=xmlDoc.getElementsByTagName("day");
if(isFirefox){ //alternately, you can detect if HTMLCollection
var y=x.item(i).children;
document.write(y.length);
}
if(isChrome){ //alternately, you can detect if NodeList
var y = new Array();
var currentChild = x.item(i).firstChild;
while(currentChild!=null){
if(currentChild.nodeType == Node.ELEMENT_NODE){
y[y.length]=currentChild;
}
currentChild=currentChild.nextSibling;
}
}
for (var j=0;j<y.length;j++){
/* loop */
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句