次の 1 番目の要素を入れて、2 番目の要素を削除しようとしましたが、うまくいきません。例を見てください: http://jsfiddle.net/CZCGG/
3 に答える
3
の結果getElementsByTagName
は、ライブ ノード リストです。要素を操作すると、疑似配列がリアルタイムで更新されます。
具体的には、ループを回るたびにi
値が飛び過ぎています。これは、削除したばかりの要素の後の要素が元の要素のインデックスを持っているためです。
これを解決するには、配列の最後から逆方向に作業する必要があります。これにより、ループの進行中に各要素が元のインデックスを保持することが保証されます。
,シーケンスNode.replaceChild
の代わりにも使用する必要がありますinsertBefore
removeChild
http://jsfiddle.net/alnitak/pfnGX/を参照
var span = document.getElementsByTagName("span");
for (var i = span.length - 1; i >= 0; --i) {
var a = document.createElement("a");
a.href = "http://jsfiddle.net/";
a.innerHTML = "http://jsfiddle.net/ " + i;
var s = span[i];
s.parentNode.replaceChild(a, s);
}
于 2012-08-21T10:27:31.597 に答える
2
ノード リストを操作しています。アイテムを削除するたびに、リストは短くなり、すべてがシャッフルされます...しかし、それでもインデックスをインクリメントしています.
于 2012-08-21T10:27:17.727 に答える
1
これを試してください、 http://jsfiddle.net/gYwSq/1/
var span = document.getElementsByTagName("span");
for(i=0; span.length!=0; i++){
var a = document.createElement("a");
a.href = "http://jsfiddle.net/";
a.innerHTML = "http://jsfiddle.net/ " + i;
span[0].parentNode.insertBefore(a, span[0]);
span[0].parentNode.removeChild(span[0]);
}
于 2012-08-21T10:32:02.037 に答える