1

基本的に、必要なときに要素のバインドを解除するか、要素を再バインドする必要があるため、jQueryコードを最適化しようとしていますが、要素を「破棄」すると、その要素に関連付けられているイベントも破棄されますか?

$(element).bind("click", function(){...});
$(element).parent().html("");

また、これが.html( "")で行われるかどうかはわかりませんが、トリックを行うには.remove()を使用する必要がありますか?

4

2 に答える 2

2

jQueryメソッドを使用して要素を追加/削除し、イベントをバインドする限り、すべて問題ありません。イベントを要素にバインドする(またはのようなものを使用する.data())と、jQueryはこの情報を。という場所に格納します$.cache。jQueryメソッドを使用してDOMを操作する場合、要素との間に実際の接続が実際にはないため、jQueryがこれらをクリーンアップし$.cacheます。したがって、ページにdivを追加し、clickjQueryでイベントをバインドしてから、で削除した場合node.parentNode.removeChild(node);$.cacheはクリーンアップされません。証拠が必要な場合は、jQueryソースで、、などのメソッドをhtml探しremovereplaceWithください。次のような呼び出しが見つかります。

jQuery.cleanData( elem.getElementsByTagName("*") );
jQuery.cleanData( [ elem ] );

$.cacheこれにより、すべてが処理されるように効果的にクリーンアップされます。重要なのは、(すべての)ライブラリを使用する場合、これらのことについて心配する必要はないということです。

ただし、使用htmlには注意が必要です。渡すものに注意してください。渡したい場合は、次のような新しいDOM構造を渡します。

var div = $("<div>")
              .attr("id", "div1")
              .click(function () {
                  alert("clicked");
              });

のようなものを使用して$("#container").html(div);も、実際にはそのクリックイベントハンドラーはバインドされません。しかし、意志のようなものを使用し.appendます。それを指摘したかっただけです。(これは要素の破棄/削除とは関係ありません)

于 2012-10-31T04:48:12.870 に答える
1

要素を削除すると、DOMはその要素内のクリックをリッスンしなくなります。

.removeでうまくいくはずです。

$(element).parent().remove();

DOMから要素を削除します。

于 2012-10-31T04:22:18.053 に答える