将jquery empty()方法清除通过非jquery方法创建的事件侦听器

Man*_*dai 11 jquery memory-leaks

我有一个包含很多子元素的元素.我想清除这个元素的内容并用新结构替换它.

子元素被赋予各种事件侦听器,并不是所有这些侦听器都是通过jquery绑定方法创建的.

如果我使用jquery的空方法来清除元素,它会删除所有的事件监听器还是只清除通过jquery bind方法创建的监听器?

小智 13

正如几位评论者所提到的,jQuery文档说empty()确实删除了事件处理程序:http://api.jquery.com/empty/

当这个问题发布时,情况可能并非如此,但此页面是谷歌的首次亮相.


the*_*dox -1

它不会清除事件侦听器。但是您应该使用此事件侦听器作为live()事件,因为您正在DOM动态更改元素。

例如:

$('a').live('click', function(){
   // your stuff
});
Run Code Online (Sandbox Code Playgroud)

// 以下代码片段需要 jQuery 1.7

$(document).on('click', 'a', function(){
   // your stuff
});
Run Code Online (Sandbox Code Playgroud)

  • 这个答案与文档相矛盾:http://api.jquery.com/empty/“为了避免内存泄漏,jQuery 在删除元素本身之前从子元素中删除其他构造,例如数据和事件处理程序。如果您想删除元素在不破坏其数据或事件处理程序(以便稍后可以重新添加它们)的情况下,请使用 .detach() 代替。” (4认同)