基本的に、必要なときに要素のバインドを解除するか、要素を再バインドする必要があるため、jQueryコードを最適化しようとしていますが、要素を「破棄」すると、その要素に関連付けられているイベントも破棄されますか?
$(element).bind("click", function(){...});
$(element).parent().html("");
また、これが.html( "")で行われるかどうかはわかりませんが、トリックを行うには.remove()を使用する必要がありますか?
基本的に、必要なときに要素のバインドを解除するか、要素を再バインドする必要があるため、jQueryコードを最適化しようとしていますが、要素を「破棄」すると、その要素に関連付けられているイベントも破棄されますか?
$(element).bind("click", function(){...});
$(element).parent().html("");
また、これが.html( "")で行われるかどうかはわかりませんが、トリックを行うには.remove()を使用する必要がありますか?
jQueryメソッドを使用して要素を追加/削除し、イベントをバインドする限り、すべて問題ありません。イベントを要素にバインドする(またはのようなものを使用する.data())と、jQueryはこの情報を。という場所に格納します$.cache。jQueryメソッドを使用してDOMを操作する場合、要素との間に実際の接続が実際にはないため、jQueryがこれらをクリーンアップし$.cacheます。したがって、ページにdivを追加し、clickjQueryでイベントをバインドしてから、で削除した場合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ます。それを指摘したかっただけです。(これは要素の破棄/削除とは関係ありません)
要素を削除すると、DOMはその要素内のクリックをリッスンしなくなります。
.removeでうまくいくはずです。
$(element).parent().remove();
DOMから要素を削除します。