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

Dou*_*eri 2 html javascript jquery cross-browser jquery-events

只是想知道如何从内存的角度来管理这个问题.

假设我有这个HTML页面.

<div id="container">
    <div id="someID"></div>
<div>
Run Code Online (Sandbox Code Playgroud)

和以下jQuery代码:

$("#someID").click(function(){
    //do something
});
Run Code Online (Sandbox Code Playgroud)

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

$("#container").empty();
Run Code Online (Sandbox Code Playgroud)

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

这是浏览器特有的吗?

小智 5

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

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

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


来自文档:

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