ホームページ >ウェブフロントエンド >jsチュートリアル >javascript異常ノードコレクション_javascriptスキル

javascript異常ノードコレクション_javascriptスキル

WBOY
WBOYオリジナル
2016-05-16 18:31:041008ブラウズ

[Ctrl A すべて選択 注: 外部 Js を導入する必要がある場合は、更新して実行する必要があります
]

場合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)
}



[Ctrl A すべて選択 注: 外部 Js を導入する必要がある場合は、更新して実行する必要があります ]

明らかに、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)
}


[Ctrl A すべて選択 注: 外部 Js を導入する必要がある場合は、
を実行するために更新する必要があります]
顺便一提,由getElementsByTagName取得的HTMLCollection也是这个样子,因此处理这类节点集合要打起十二分精神了!

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

这两种节点集合在各浏览器还实现得不太一样,如标准浏览器我们可以用Array.prototype.slice.call将它们转换为原生数组,IE则报错。标准浏览器的它们有hasOwnProperty与valueOf,而IE是没有的……
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。