3

所以,我知道当我对 DOM 中的元素执行 .remove() 时,它及其所有子元素都会被删除并标记为删除/垃圾收集。类似地,所有元素的 jQuery UI 小部件都将触发它们的“destroy”方法,并且 .data() 空间中的所有条目将为每个元素删除。在决定清除我的 DOM 树的一部分时,我需要知道的是 remove 是否实际上也为每个元素显式地触发了 .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。

js小提琴

于 2012-10-30T23:13:12.287 回答