2013-06-03 9 views
8

私は<div/>のhtmlコンテンツをAJAX呼び出しの応答で設定するポップアッププラグインを持っています。html()の前、またはinnerHTMLの前にempty()を呼び出す必要がありますか?

コードをポップアップするたびに、私は$("#popup").html(response)を呼び出します。これは、既存のhtmlコンテンツを新しいコンテンツで上書きします。

私は$("popup").html(response)を呼び出す前に$("popup").empty()に電話する必要がありますので、以前は$("popup") divだったオブジェクトが使用していたブラウザのメモリを解放しますか? (最終的にはメモリリークを防ぎます)

PS:どうすれば$("popup")[0].innerHTML = responseと呼びますか?私は.empty()メソッドに電話する必要がありますか?

+0

http://stackoverflow.com/questions/8567957/is-empty-enough-for-big-ajaxy-apps?rq=1 –

答えて

7

短答No。

jQuery.fn.htmlは、他のいくつかのことを行った後にDOMNode.innerHTML =を使用します。 1つは、ノード上の格納されたデータをすべて削除することです($.fn.dataを介して格納されます)。詳細は、http://james.padolsey.com/jquery/#v=git&fn=jQuery.fn.htmlを参照してください。

.innerHTMLは、子を削除し、新しいhtmlで置き換えます。しかし、メモリリークに注意してください。 innerHTMLを設定する前にjQuery.fn.emptyを使用します。例えば。

var a = document.createElement('div'), 
    b = document.createElement('div'); 

    b.appendChild(a); 

    b.innerHTML = 'new innerHMTL'. 

すべては問題ありません。しかし、ノードは置き換えられ/削除されたままで、まだ可変部分aに取り込まれているため、ガベージコレクタにスローされません。私は、コンテキストの内容を上書きすることができます)、またはあなたがjQuery.removeDataなど

1

empty()に電話する必要はありません。 htmlresponse)方法 existing content

4

HTML方式のjQueryのドキュメントは言う:.htmlを()は要素の内容を設定するために使用されている場合

、その要素にあったすべてのコンテンツが完全に新しいコンテンツに置き換えられます。さらに、jQueryは、子要素からデータおよびイベントハンドラなどの他の構成要素を削除してから、それらの要素を新しいコンテンツに置き換えます。

empty()に電話する必要はありません。

関連する問題