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

jQuery:如果使用html()从DOM中删除事件处理程序,是否会从对象中删除它们,jquery,events,memory,Jquery,Events,Memory,我担心应用程序中的内存泄漏,因为我经常使用jquery的html()方法来替换DOM中的内容我只想确保这些事件侦听器不会在浏览器内存中徘徊。 我搜索了jquery文档,但没有明确的答案。有人知道吗 谢谢大家 是的 如果您使用jQuerys.html()它会照顾您。查看jQuery源代码,这一行被调用: jQuery.cleanData( this[i].getElementsByTagName("*") ); 它可以有效地清理所有数据和事件。如果要显式覆盖DOMnodesinnerHTML属性

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

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

谢谢大家

是的

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

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

它可以有效地清理所有数据和事件。如果要显式覆盖DOMnodes
innerHTML
属性,这当然不起作用。

在jQuery中使用bind似乎可以更好地控制事件和处理程序,例如本例中的

但是我不知道是否可以用$('a')的正常jQuery语法来控制它。click()因为返回的只是一个jQuery对象,没有对处理程序或事件的引用

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


啊,太好了!jquery不是很可爱吗:)
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);