例如,如果我有一个绑定了以下事件的链接:
$("a.d").bind("click", this, onDelete);
以后再做:
$("a.d").remove();
这样好吗?或者是否会导致内存泄漏,我需要调用unbind 1st?
感谢您的帮助。
答案 0 :(得分:6)
来自jQuery docs for remove()
从中删除所有匹配的元素 DOM。这不会删除它们 jQuery对象,允许你使用 匹配的元素。注意 这个函数从1.2.2开始 还将删除所有事件处理程序 和内部缓存的数据。
答案 1 :(得分:4)
我还没有对它进行过测试,但我相信删除一个元素会解除其事件处理程序的绑定。我从jQuery API documentation(搜索删除)得出这个结论,该结论表明如果你想将一个元素从DOM的一个部分移动到另一个部分:
$("#foo").remove().appendTo("#bar");
应该写成
$("#foo").appendTo("#bar");
以避免丢失事件处理程序。
答案 2 :(得分:0)
答案是肯定的,只要事件附加了jQuery。如果附上像“onclick”这样的东西,我不相信它会。
本文讨论其中的一些内容。它还定义了一个递归函数,用于删除元素及其所有子元素的所有单击事件。它将涵盖jQuery单击处理程序以及使用onclick定义的处理程序,因此您将被覆盖。
http://www.computerhowtoguy.com/how-to-use-the-jquery-unbind-method-on-all-child-elements/
function RecursiveUnbind($jElement) {
// remove this element's and all of its children's click events
$jElement.unbind();
$jElement.removeAttr('onclick');
$jElement.children().each(function () {
RecursiveUnbind($(this));
});
}
要使用上一个示例中的函数,我们将调用函数将“container”div作为jQuery对象传递给它。
RecursiveUnbind($('#container'));
答案 3 :(得分:-2)
为了记录,你不必担心javascript中的内存泄漏。 (冷静的人,不是c ++!)
浏览器的javascript引擎管理所有对象,垃圾收集它们。当我说对象时,这也意味着事件处理函数,因为函数也是javascript中的对象。
无关:我喜欢javascript中的所有内容:D
干杯!
JRH