使用jquery删除DOM元素.remove()

时间:2016-05-30 12:42:32

标签: jquery memory-leaks

如果我们使用jquery .on()附加委托事件,如

$(".container").on("click", "#testDiv", function (event){
  console.log(event);
});
如果我用jquery .remove()删除#testDiv元素,那么脚本中的

和后者,

$("#testDiv").remove();

那么它是否会造成任何内存泄漏......

1 个答案:

答案 0 :(得分:0)

好吧,既然您使用了附加到.container 的委托事件,您的事件监听器将 NOT 被删除。

documentation说:

  

事件委托允许我们将单个事件监听器附加到   父元素,将为匹配a的所有后代触发   选择器,无论这些后代现在存在还是被添加到   将来

这意味着只要在.container内触发 click 事件,就会始终执行查询以检查点击的元素是否为#testDiv

这不能定义内存泄漏,因为它确实应该如何处理事件委托。阅读this post,其中解释了事件委派和直接绑定之间的性能差异。

无论如何,如果你不再需要那个听众,你可以:

  • 调用.off()函数在删除元素之前手动删除侦听器
  • 或者如果你真的不需要,可以不使用事件委托,但直接绑定