jquery .remove()是否在后代DOM元素上触发.off()

时间:2012-10-30 23:12:18

标签: javascript jquery memory-leaks

所以,我知道当我在DOM中的一个元素上执行.remove()时,它及其所有子节点都被删除并标记为删除/垃圾收集。类似地,所有元素的jQuery UI小部件将触发它们的“destroy”方法,并且将删除.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()?

1 个答案:

答案 0 :(得分:5)

是的,它取消绑定所有事件处理程序。

  

除了元素本身之外,还删除了与元素关联的所有绑定事件和jQuery数据。

Source

如果您想保留事件处理程序,可以使用detach()

另外,你提到......

  

所以,我知道当我对DOM中的一个元素执行.remove()时,它及其所有子节点都被删除并标记为删除/垃圾收集。

这不一定是真的。您可能仍然可以参考这些元素。相反,引用计数将递减,如果它达到0,则可以标记为GC。

jsFiddle