2011-03-04 15 views

答えて

14

。それがページの可視要素であれば、ページから削除されます。

しかし、Javascriptにガベージコレクションがあります。これは、変数が参照される限り、ノードオブジェクト自体が存続することを意味します。したがって、変数にノードを割り当てることができます。removeChildを親ノードから「プルーニング」し、後で他のノードに挿入または追加することで、効果的にページ上を移動させることができます。

次のコードは、ノードを削除し、(ページに、このようにして)ツリーにそれを再追加する前に10秒待っ:

var oldNode = someNode.removeChild(...); 
setTimeout(function() { 
    document.documentElement.appendChild(oldNode); 
}, 10000); 

これは、ノードオブジェクトがされていないことを意味しそれでも変数を指しているので、メモリから削除されます(つまり、oldNode)。

別のケース:

var node = document.getElementById('test'); 
// ... do stuff 
node.parentElement.removeChild(node); 
// 'node' still exists, but has been removed from the page 
// ... do some more stuff 
node = document.getElementById('hello'); 
// The variable 'node' now points to something else; 
// this means the original node will be deleted from memory 

一方で、あなたは別の変数に削除したノードを再割り当てしません、場合、それは以降、いないドキュメントツリーを経由して(もうアクセスすることはできませんそれはJS変数からではなく、そこから削除されています)。そうJavascriptが自動的にメモリからそれを削除します:

someNode.removeChild(...); 

変数に削除したノードを割り当て、その後、その変数にnull(または何か他)を割り当てる - マルク・Bのように彼の答えに示唆 - 、完全に不要であり、 IMHO、ばか。

1

removeChildはdomから要素を削除しますが、削除を実行して別の場所に挿入する場合は、関数からも戻されます。それはないですので、

someNode.removeChild(...); 

これはDOMからノードを削除します:これは完全にノードを削除します

oldNode = someNode.removeChild(...); 
oldNode = null; 
+0

ありがとうございました:) –

+5

戻り値に同じ効果が割り当てられているとは限りません。 – awm

+1

Nullは便利で、値を破棄していることは明らかです。 'oldNode = 'このノードを削除してください' 'を実行すると、文字の浪費のように思えます。 –

10

:あなたは本当に削除したノードを取り除くためにその戻り値を殺すために必要があるだろうあなたが他の場所に挿入することができるように見えるが、それを保存します:removeChild方法は、単にその親から削除し

oldNode = someNode.removeChild(...); 
+1

最初の例は正しいですが、動作しないような状況がありました。'var aChild = document.createElement(...); someNode.appendChild(aChild); ... someNode.removeChild(aChild); 'ノードはaChild変数参照のために残ります。その場合、 'aChild'を削除してジョブを完了させる必要があります。 – CyberFonic

+0

別のコンテキスト(削除されたノードへの他の参照があるかどうかわからない場合があります)では、削除されたノードが 'node.parentElement == null 'でどの状態にあるかを確認できます。 –

+0

これは考慮に入れませんノードへの他の参照。つまり、ノードが他の場所で参照されている場合、 'removeChild'はノードを完全に削除しません。 –

1

実際にDOM要素を削除する場合は、 removeChildだけでは不十分です。これは、YSlowの著者Steve Sounders氏によるものです。

関連する問題