6

「空の」関数のjqueryドキュメント(http://api.jquery.com/empty/)には、次のステートメントがあります。

"To avoid memory leaks, jQuery removes other constructs such as data and event handlers
from the child elements before removing the elements themselves."

テキストには、「... jQueryは!CHILD!要素からイベントハンドラーを削除します...」と書かれています。ただし、イベントハンドラーもdivタグ($( "#mydiv")。empty)から削除する必要があります。「削除」機能があることは知っていますが、私の意図はdivタグを削除しないことです。これを行うための最良の方法は何ですか?

もう1つは
、「イベントハンドラーを削除する」と言われたときです。「bind」で作成されたコンストラクトのみを削除しますか、それとも「delegate」で作成されたコンストラクトも削除しますか?

よろしくお願いします

4

3 に答える 3

9

"*"要素からすべてのバインドされたイベントハンドラーを削除するには、off() メソッドに特別な値を渡すことができます。

$("#mydiv").empty().off("*");

ドキュメントに記載されている場合、削除の影響を受けない祖先要素(またはドキュメント自体)にバインドされているため、委任されたイベントハンドラーではなく、バインドされremove events handlersたイベントハンドラーについてのみ説明します。

これにより、削除された要素が後で復元された場合でも、委任されたハンドラーは意図したとおりに機能し続けることができます。

于 2012-07-23T08:47:03.007 に答える
1

私が正しく読んだ場合、divタグを削除したくない場合は、すべてのデータとハンドラーを削除したいだけです。その場合は、.empty()を次のように組み合わせます。

http://api.jquery.com/unbind/

ただし、次の点に注意してください。「。bind()でアタッチされたイベントハンドラーは.unbind()で削除できます。(jQuery 1.7以降、要素のイベントハンドラーをアタッチおよび削除するには、.on()および.off()メソッドが推奨されます。 )最も単純なケースでは、引数がない場合、.unbind()は要素にアタッチされているすべてのハンドラーを削除します。 "

イベントをバインドする方法に対応する削除ツールを使用します。

呼び出している要素も削除する場合は、.empty()を使用せず、代わりに.remove()を使用してください。

http://api.jquery.com/remove/

「.empty()と同様に、.remove()メソッドはDOMから要素を取り出します。要素自体とその中のすべてを削除する場合は.remove()を使用します。要素自体に加えて、すべて要素に関連付けられたバインドされたイベントとjQueryデータが削除されます。データとイベントを削除せずに要素を削除するには、代わりに.detach()を使用してください。」

于 2012-07-23T08:50:03.927 に答える
1

このjQueryコードを試してください。

 jQuery('#element').bind('click',function(){
    console.log('clicked');
    }).on('remove',function(){
       console.log('element removed');
       jQuery(this).unbind('click').off('remove');
    });

    jQuery('#element').remove();
于 2014-10-08T07:32:58.147 に答える