]
場合nodeList を次のように変換します。配列には問題ありません。
コードは次のとおりです。
window.onload = function(){
var d = document.createDocumentFragment();
var div = document.getElementById("aaa");
var arr = []; var i= 0,n=c.length;iarr.push(c[i])
}
for(var i=0,n=arr.length; ialert(arr[i] " " i)
d.appendChild(arr[i])
}
div.parentNode.replaceChild(d,div)
}
明らかに、nodeList には配列にはない機能があります。ボックス 2 を実行すると、ノードをドキュメント フラグメントに追加するときに、実際には DOM ツリーから分離され、nodeList がこの変更を追跡して動的に変更する必要があり、線形インクリメントが正しいインデックスに対応できないことがわかります。ノード!したがって、毎回 firstChild を取得するだけです。
window.onload = function(){
var d = document.createDocumentFragment();
var div = document.getElementById("aaa");
var c = div.childNodes;
while(c.length) [0] )//空になるまで毎回最初のノードのみを取得します
div.parentNode.replaceChild(d,div)
}
を実行するために更新する必要があります]
顺便一提,由getElementsByTagName取得的HTMLCollection也是这个样子,因此处理这类节点集合要打起十二分精神了!
这两种节点集合在各浏览器还实现得不太一样,如标准浏览器我们可以用Array.prototype.slice.call将它们转换为原生数组,IE则报错。标准浏览器的它们有hasOwnProperty与valueOf,而IE是没有的……