0

JavaScriptに問題があります。

親divからdivのリストを削除する必要があります。だから私はこれを試しました:

var divs = parent.getElementsByTagName("div");
if(divs != null)
{
    for(var v = 0; v < divs.length; v++)
    {
        parent.removeChild(divs[v]);
    }
}

しかし、問題は、JSがすべてのdivを削除しないことです。JSはリストの半分だけを削除します。

私もこれを試しました:

var divs = parent.getElementsByTagName("div");
if(divs != null)
{
    for(var v = 0; v < divs.length; v++)
    {
        parent.removeChild(divs[0]);
    }
}

しかし、同じ結果で

助けてください?

4

3 に答える 3

3
var divs = parent.getElementsByTagName("div");
while(divs[0]) {
    divs[0].parentNode.removeChild(divs[0])
}

getElementsByTagNameによって返されるリストはライブです。これは、DOMオブジェクトを削除すると更新されるため、各サイクルで長さが同じではないことを意味します。

これがフィドルです。

于 2012-10-30T17:07:23.603 に答える
1

次のようなものを試してみませんか。

var divs = parent.getElementsByTagName("div");
if (divs.length > 0) {  // Technically unnecessary, as the for loop just won't run if there aren't any elements returned
    for (var v = divs.length; v >= 0; v--) {
        divs[v].parentNode.removeChild(divs[v]);
    }
}

これが正しい理由の説明として、を使用して親ノードのremoveChild実際の子を削除する必要があります。が子孫である場合div[v](divではなく別の要素の内部にネストされているように、の実際の子ですparent)。これは、要素への参照がある場合に要素を削除する安全な方法です。要素の親ノードが要素を削除していることを保証するため、有効です。コンソールをチェックして、自分のparent.removeChildコードや他のコードと同じように使用しようとすると、子孫に対して例外がスローされます-http://jsfiddle.net/ujaSv/

これに対するforループのより良い代替手段は次のとおりであることを指摘することは重要ですが:

while (divs[0]) {
    divs[0].parentNode.removeChild(divs[0]);
}

私はこの輝きについては考えていませんでした-これは別の回答/コメント領域で決定されました。

于 2012-10-30T17:06:25.833 に答える
1

2つの解決策:

1:カウントダウン

var divs = parent.getElementsByTagName("div");
if(divs != null)
{
    for(var v = divs.length - 1; v >= 0; v--)
    {
        parent.removeChild(divs[0]);
    }
}​

2:キャッシュの長さ:

var divs = parent.getElementsByTagName("div");
if(divs != null)
{
    for(var v = 0, len = divs.length; v < len; v++)
    {
        parent.removeChild(divs[0]);
    }
}
于 2012-10-30T17:06:29.500 に答える