jQuery:如果使用html()从DOM中删除对象,则会从对象中删除事件处理程序

时间:2011-04-01 10:54:35

标签: jquery events memory

我担心应用程序中的内存泄漏,因为我使用jquery的html()方法来替换DOM中的内容。 我只是想确保这些事件监听器不会出现在浏览器内存中。

我搜索了jquery文档但没有明确的答案。有谁知道吗?

谢谢你们!

2 个答案:

答案 0 :(得分:5)

是的。

如果您使用jQuerys .html(),它会照顾您。查看jQuery源代码,这一行被调用:

jQuery.cleanData( this[i].getElementsByTagName("*") );

有效清理所有数据事件。如果您明确覆盖DOMnodes innerHTML属性,这当然不会起作用。

答案 1 :(得分:1)

似乎在jQuery中使用bind,您可以更好地控制事件和处理程序,例如http://api.jquery.com/unbind/

中的示例
var myHandlers = {};    

myHandlers.handler = function() {
    alert('The quick brown fox jumps over the lazy dog.');
};
$('#foo').bind('click', handler);
$('#foo').unbind('click', handler);

delete(myHandlers.handler);

但我不知道是否可以使用$('a')的正常jQuery语法进行控制。单击()因为返回的所有内容都是jQuery对象,并且没有对处理程序或事件的引用。 / p>

这里有关于堆栈溢出的相关讨论:

javascript memory leaks