0

クラス .FormErrorMessage を持つすべての子ノードを要素 #LoginFormErrorWrapper から削除しようとしています。それが違いを生む場合、これらは XUL の「説明」要素です。

このコードの使用:

var Messages = document.getElementById('LoginFormErrorWrapper').getElementsByClassName("FormErrorMessage");
for (var i = 0; i < Messages.length; i++) {
   var node = Messages[i];
   document.getElementById('LoginFormErrorWrapper').removeChild(node); 
}

最初の要素のみが削除されます。Messages にはすべての要素が含まれていますが、最初の子が削除されると、ループは停止します。removeChild 行をコメントアウトしてノードにアラートを出すと、すべてのノードにアラートが出ます。最初の子が削除された後にループが停止するのはなぜですか? 親はまだ存在します。

4

1 に答える 1

2

getElementsByClassNameライブNodeListを返します。そのため、要素を DOM から削除すると、NodeList からも削除され、さまざまな副作用が発生します。

NodeList を配列に変換することでそれらを回避できます

var Messages = [].slice.call(document.getElementById('LoginFormErrorWrapper').getElementsByClassName("FormErrorMessage"));
于 2013-09-07T20:08:02.017 に答える