2

これがメモリの観点からどのように管理されているのか疑問に思っています。

この HTML ページがあるとします。

<div id="container">
    <div id="someID"></div>
<div>

および次の jQuery コード:

$("#someID").click(function(){
    //do something
});

スクリプトのどこかで、次のすべてのコンテンツを空にする (クリアする) 必要があります#container

$("#container").empty();

これはクリックイベントを自動的に削除/バインド解除しますか?それとも自分で行う必要がありますか?

これはブラウザ固有のものですか?

4

4 に答える 4

5

はい、この.empty()メソッドはハンドラのバインドを解除し、jQuery.cache内にネストされたすべての要素について に保存されている他のすべてのデータをクリアします#container

jQuery は、1 つの (ジェネリック) ハンドラーのみを要素にバインドします。他のすべてのハンドラとデータは に格納されjQuery.cacheます。各要素のデータは、jQuery が DOM ノードに直接配置するシリアル番号によって相互参照されます。

つまり、これは jQuery 固有のシステムです。唯一のブラウザー固有の問題は、jQuery が汎用ハンドラーをバインドする方法であり、jQuery はそのバインド解除も処理します。


ドキュメントから:

「メモリ リークを回避するために、jQuery は要素自体を削除する前に、子要素からデータやイベント ハンドラーなどの他の構成要素を削除します。」

于 2012-07-30T17:54:01.857 に答える
2

あなたが探しているのは..

$('something').remove();  /removes element and children

$('something').empty(); // clears children

どちらもすべてdataを削除eventsし、削除された要素に関連付けられています。

于 2012-07-30T17:59:33.283 に答える
1

jQuery.empty():

メモリ リークを回避するために、jQuery は要素自体を削除する前に、子要素からデータやイベント ハンドラーなどの他の構成要素を削除します。

データやイベント ハンドラーを破棄せずに要素を削除する (後で再追加できるようにする) 場合は、.detach()代わりに を使用します。

于 2012-07-30T17:57:25.277 に答える