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

时间:2011-11-14 10:46:26

标签: jquery memory-leaks

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

为子元素分配了各种事件侦听器,并非所有这些侦听器都是通过jquery bind方法创建的。

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

3 个答案:

答案 0 :(得分:13)

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

在发布此问题时,或许并非如此,但此页面是Google首次曝光。

答案 1 :(得分:3)

您可以使用 .unbind()取消绑定对象的所有侦听器,并将params留空

如果要删除元素的所有子元素。只需用户 $(“#parent”)。children()。remove();

使用 live() die()方法,您可以将事件处理程序添加到尚不存在的元素中。使用 $(“。element”)。live(“click”,function(){})为当前在HTML中的所有.element对象或将来添加的对象添加一个函数

答案 2 :(得分:0)

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

例如:

$('a').live('click', function(){
   // your stuff
});

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

$(document).on('click', 'a', function(){
   // your stuff
});
相关问题