1

要素の配列があり、配列を反復処理するときに、それぞれに inserBefore を使用したいと考えています。配列内の各要素の後に挿入する要素を追加することになっていますが、配列の最後の要素にのみ追加します。クロージャーの問題だと思いましたが、クロージャーを使用した後でも問題が発生します。クロージャーなしで、クラス名を配列がオンになっているキー値に変更してテストしましたが、問題なく変更されました。

for(var i in elems){
                    var refElem = elems[i];

                        refElem.parentNode.insertBefore(elementToInsert, refElem.nextSibling);
                }

クロージャーを除いたコードは次のとおりです。配列内の各要素に elementToInsert を追加するにはどうすればよいですか?

4

3 に答える 3

4

各要素の後に挿入する要素を追加することになっています

ここで問題が発生します。DOM に 1 つの要素を複数回挿入することはできません。しようとすると、どこかに挿入する前にDOMから要素を削除するだけです(再び)。そのため、ループのターンごとに個別の要素を作成する必要があります。たとえば、 elementToInsert.

ところで、配列で for... in-loops を使用しないでください。

于 2013-02-06T23:07:28.890 に答える
2

Bergi が言ったように、挿入する要素は実際にはノードに追加されてから削除されます。

for(var i in elems){
    var refElem = elems[i];
    refElem.parentNode.insertBefore(elementToInsert.CloneNode(), refElem.nextSibling);
}

パラメータ「deep」を通知することもできます。これにより、すべての子ノードも複製されます。

https://developer.mozilla.org/en-US/docs/DOM/Node.cloneNode

于 2013-02-06T23:22:34.353 に答える