只是想知道如何从内存的角度来管理它。
假设我有这个HTML页面。
<div id="container">
<div id="someID"></div>
<div>
以及以下jQuery代码:
$("#someID").click(function(){
//do something
});
现在在我的脚本中的某处我需要清空(清除)#container
中的所有内容:
$("#container").empty();
这会自动删除/取消绑定点击事件,还是我必须自己删除?
这是浏览器特有的吗?
答案 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
两者都会删除与已删除元素相关联的所有data
和events
。
答案 2 :(得分:1)
为了避免内存泄漏,jQuery删除了其他构造,如数据 和删除之前来自子元素的事件处理程序 元素本身。
如果要删除元素而不破坏其数据或事件 处理程序(以便以后可以重新添加),请改用
.detach()
。
答案 3 :(得分:0)
$("#container").unbind();
//从元素中删除以前附加的事件处理程序。
$('something').empty();
//清除孩子。
$('something').remove();
//删除元素和子元素。