3

したがって、DOM内の要素に対して.remove()を実行すると、その要素とそのすべての子が削除され、削除/ガベージコレクションのフラグが立てられることがわかります。同様に、すべての要素のjQuery UIウィジェットは「破棄」メソッドを起動し、要素ごとに.data()スペースのすべてのエントリが削除されます。DOMツリーの一部をクリーンアップすることを決定する際に知っておく必要があるのは、削除によって各要素の.off()が明示的にトリガーされるのか、それとも自分で行う必要があるのか​​ということです。

たとえば、私が一連のdivを持っているとしましょう。

<div id="A-1">
    <div class="HasEventListener DelegatedEventBindPoint id="B-1">
        <button class="CreatesDelegatedEvent" id="C-1" />
    </div>
    <button class="HasEventListener NonDelegatedEvent" id="B-2" />
</div>

したがって、$( "#A-1")。remove()を実行すると、$( "。HasEventListener")。off()と同様のコマンドが効果的に呼び出されますか?

4

1 に答える 1

5

はい、すべてのイベントハンドラーのバインドを解除します。

要素自体に加えて、要素に関連付けられているすべてのバインドされたイベントとjQueryデータが削除されます。

ソース

detach()イベントハンドラーを保持したい場合に使用できます。

また、あなたは言及します...

.remove()したがって、 DOM内の要素を実行すると、その要素とそのすべての子が削除され、削除/ガベージコレクションのフラグが立てられることがわかります。

それは必ずしも真実ではありません。あなたはまだそれらの要素への参照を持っているかもしれません。代わりに、参照カウントがデクリメントされ、0に達すると、GCのフラグが立てられる場合があります。

jsFiddle

于 2012-10-30T23:13:12.287 に答える