2008-08-17 19 views

答えて

84

でメモリリークを避けるために、あなたがノード上で設定した任意のイベントハンドラを削除する必要があります - そこにこれを行うための様々な方法がありますが、以下の最もシンプルになるでしょう。あなたのいずれかを使用していない場合は、明らかに

myChildNode.parentNode.removeChild(myChildNode); 

すでに削除したい子ノードへのハンドルを持っている場合は、あなたがそれへの参照を保持するJavaScript変数を持っている、すなわち、他の人が述べたように:あなたがアップ有線任意のイベントハンドラを持っている場合

function removeElement(node) { 
    node.parentNode.removeChild(node); 
} 

EDIT:すでにこれを行う数多くのライブラリが、あなたはこのうち抽象化する関数を作成したいと思います除去しているノードへの最後の参照がスコープから外れる前に、それらの接続を切断することを確認することをお勧めします。

+1

「実装が貧弱」。 IE6、IE7、IE8などを意味しますか? (特に、良いブラウザにもメモリがリークしていますか?私は現在IE6-7のために気にしません)。 –

+0

@CamiloMartin - 最近の詳細はわかりませんが、私が思い出す限り、「良い」ブラウザそのようなことを見てそれを処理するはずです。 YMMV –

+0

これは意味があります。 –

0

ノードの.RemoveNodeメソッドまたは親ノードの.RemoveChildメソッドを使用できるはずです。

+0

removeNodeはIEのみです。 –

42

あなたはdiv要素をクリアし、すべての子ノードを削除したい場合は、あなたが置くことができる:

var mydiv = document.getElementById('FirstDiv'); 
while(mydiv.firstChild) { 
    mydiv.removeChild(mydiv.firstChild); 
} 
0

おそらく、このようなことを行うためにJavaScriptライブラリを使用する必要があります。

たとえば、MochiKitは関数removeElementを持ち、jQueryはremoveです。

4

あなたはそれを削除する前に、元の質問に答えるためにIE

+0

IE8もリークしますか? –

3

jQueryのソリューション

HTML

<select id="foo"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

Javascriptを

// remove child "option" element with a "value" attribute equal to "2" 
$("#foo > option[value='2']").remove(); 

// remove all child "option" elements 
$("#foo > option").remove(); 

参考文献:

Attribute Equals Selector [name=value]

は一定値に正確に等しい値 と指定された属性を持つ要素を選択します。

Child Selector (“parent > child”)

(すべての直接の子要素 要素の "子" で指定された .emptyと同様に "親"

.remove()

で指定を選択します)、.remove() メソッドは、DOMから要素を取り出します。 に要素を削除したい場合は.remove()を使用し、その内にはすべて を削除します。 要素自体に加えて、 に関連付けられたすべての イベントとjQueryデータがバインドされます。

2

次のコードを使用します。

//for Internet Explorer 
document.getElementById("FirstDiv").removeNode(true); 

//for other browsers 
var fDiv = document.getElementById("FirstDiv"); 
fDiv.removeChild(fDiv.childNodes[0]); //first check on which node your required node exists, if it is on [0] use this, otherwise use where it exists. 
4

targetNode.removeを()

これは、後半に2015のようW3Cが推奨する、とバニラJSです。前の方法よりも優れた/きれいな方法。あなたのユースケースについては

document.getElementById("FirstDiv").remove(); 

あなたは後方互換性を確保するために、ポリフィルが必要な場合:

if (!('remove' in Element.prototype)) { 
    Element.prototype.remove = function() { 
     if (this.parentNode) { 
      this.parentNode.removeChild(this); 
     } 
    }; 
} 
1
var p=document.getElementById('childId').parentNode; 
    var c=document.getElementById('childId'); 
    p.removeChild(c); 
    alert('Deleted'); 

pは親ノードおよびcは子ノード
parentNodeはAです親参照を含むJavaScript変数

わかりやすい

関連する問題