我担心应用程序中的内存泄漏,因为我经常使用jquery的html()方法来替换DOM中的内容。我只想确保这些事件的监听器不会在浏览器内存中徘徊。
我搜索了jquery文档,没有明确的回答。有人知道吗?
谢谢你们!
发布于 2011-04-01 03:11:03
是的。
如果您使用jQuerys .html()
,它将照顾您。查看jQuery源代码,将调用这一行:
jQuery.cleanData( this[i].getElementsByTagName("*") );
有效地清理了所有的数据和事件。当然,如果您要显式地覆盖DOMnodes innerHTML
属性,则这是行不通的。
发布于 2011-04-01 03:13:50
在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);
但是,我不知道这是否可以用普通的jQuery语法$('a').click()来控制,因为返回的只是一个jQuery对象,没有对处理程序或事件的引用。
关于堆栈溢出问题,这里有相关的讨论:
https://stackoverflow.com/questions/5512380
复制相似问题