假设我有一个元素:
<section id="container">
<div id="curious">hey, there</div>
</section>
然后,在DOM加载之后,我将事件绑定到元素,如下所示:
$('#curious').click(function (){
alert('Are you curious?');
});
稍后,该元素将被删除:
$('#container').html('');
绑定事件会怎样?它也被删除了吗?它徘徊吗?清理它是一个好习惯吗?
答案 0 :(得分:5)
根据.html()
method的jQuery文档,删除了事件处理程序。
这样做是为了防止内存泄漏。
当
.html()
用于设置元素的内容时,该元素中的任何内容都将被新内容完全替换。此外,在使用新内容替换这些元素之前,jQuery 会从子元素中删除其他构造(如数据和事件处理程序)。
同样,使用.empty()
/ .remove()
方法同样适用:
删除与元素关联的所有绑定事件和jQuery数据。
如果要保留数据和事件侦听器,请改用.detach()
method。 .detach()
方法基本上与.remove()
方法相同,只是它保留了所有jQuery数据与删除的元素相关联(这意味着您可以在分离后添加相同的元素,并且事件仍将受到约束)。