[英]Element.children not working on Chrome
我已經閱讀了有關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出問題了?
我要感謝@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 */
}
在我的Chrome版本27上,以下工作正常:
[].forEach.call (document.body.children, function (e) { console.log (e); });
就像在Firefox 16上一樣
試試childNodes
,這是一個標准屬性。 children
屬性可能不適用於所有瀏覽器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.