2

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

假设我有这个 HTML 页面。

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

和以下 jQuery 代码:

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

现在在我的脚本中的某个地方,我需要清空(清除)以下所有内容#container

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

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

这是浏览器特有的吗?

4

4 回答 4

5

是的,该.empty()方法取消绑定处理程序,并清除所有其他jQuery.cache嵌套在#container.

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

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


从文档:

“为了避免内存泄漏,jQuery 在删除元素本身之前从子元素中删除了其他结构,例如数据和事件处理程序。”

于 2012-07-30T17:54:01.857 回答
2

我想你在找什么,是..

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

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

两者都将删除所有dataevents与已删除元素相关联。

于 2012-07-30T17:59:33.283 回答
1

jQuery.empty()

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

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

于 2012-07-30T17:57:25.277 回答
0

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

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

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

于 2014-07-31T16:57:37.883 回答