jQueryメソッドを使用して要素を追加/削除し、イベントをバインドする限り、すべて問題ありません。イベントを要素にバインドする(またはのようなものを使用する.data()
)と、jQueryはこの情報を。という場所に格納します$.cache
。jQueryメソッドを使用してDOMを操作する場合、要素との間に実際の接続が実際にはないため、jQueryがこれらをクリーンアップし$.cache
ます。したがって、ページにdivを追加し、click
jQueryでイベントをバインドしてから、で削除した場合node.parentNode.removeChild(node);
、$.cache
はクリーンアップされません。証拠が必要な場合は、jQueryソースで、、などのメソッドをhtml
探しremove
てreplaceWith
ください。次のような呼び出しが見つかります。
jQuery.cleanData( elem.getElementsByTagName("*") );
jQuery.cleanData( [ elem ] );
$.cache
これにより、すべてが処理されるように効果的にクリーンアップされます。重要なのは、(すべての)ライブラリを使用する場合、これらのことについて心配する必要はないということです。
ただし、使用html
には注意が必要です。渡すものに注意してください。渡したい場合は、次のような新しいDOM構造を渡します。
var div = $("<div>")
.attr("id", "div1")
.click(function () {
alert("clicked");
});
のようなものを使用して$("#container").html(div);
も、実際にはそのクリックイベントハンドラーはバインドされません。しかし、意志のようなものを使用し.append
ます。それを指摘したかっただけです。(これは要素の破棄/削除とは関係ありません)