jQuery empty(),click()和内存管理

时间:2012-07-30 17:52:47

标签: javascript jquery html javascript-events cross-browser

只是想知道如何从内存的角度来管理它。

假设我有这个HTML页面。

<div id="container">
    <div id="someID"></div>
<div>

以及以下jQuery代码:

$("#someID").click(function(){
    //do something
});

现在在我的脚本中的某处我需要清空(清除)#container中的所有内容:

$("#container").empty();

这会自动删除/取消绑定点击事件,还是我必须自己删除?

这是浏览器特有的吗?

4 个答案:

答案 0 :(得分:5)

是的,.empty()方法取消绑定处理程序,并清除jQuery.cache中存储的#container嵌套所有元素的所有其他数据。

jQuery只将单个(通用)处理程序绑定到一个元素。所有其他处理程序和数据都存储在jQuery.cache中。每个元素的数据由jQuery直接放在DOM节点上的序列号交叉引用。

所以这是一个特定于jQuery的系统。唯一特定于浏览器的问题是jQuery如何绑定通用处理程序,jQuery也负责解除绑定。


来自文档:

  

&#34;为了避免内存泄漏,jQuery会在删除元素本身之前从子元素中删除其他构造(如数据和事件处理程序)。&#34;

答案 1 :(得分:2)

我认为你在寻找的是......

$('something').remove();  /removes element and children

$('something').empty(); // clears children

两者都会删除与已删除元素相关联的所有dataevents

答案 2 :(得分:1)

jQuery.empty()

  

为了避免内存泄漏,jQuery删除了其他构造,如数据   和删除之前来自子元素的事件处理程序   元素本身。

     

如果要删除元素而不破坏其数据或事件   处理程序(以便以后可以重新添加),请改用.detach()

答案 3 :(得分:0)

$("#container").unbind(); //从元素中删除以前附加的事件处理程序。

$('something').empty(); //清除孩子。

$('something').remove(); //删除元素和子元素。