基本上,我试图通过随时取消绑定元素来优化我的 jQuery 代码,或者我需要重新绑定它们,但我有一个问题,“破坏”一个元素是否也会破坏附加到该元素的事件?
$(element).bind("click", function(){...});
$(element).parent().html("");
另外我不确定这是否是用 .html("") 完成的,我是否必须使用 .remove() 才能做到这一点?
基本上,我试图通过随时取消绑定元素来优化我的 jQuery 代码,或者我需要重新绑定它们,但我有一个问题,“破坏”一个元素是否也会破坏附加到该元素的事件?
$(element).bind("click", function(){...});
$(element).parent().html("");
另外我不确定这是否是用 .html("") 完成的,我是否必须使用 .remove() 才能做到这一点?
只要您使用 jQuery 方法添加/删除元素和绑定事件,一切都应该没问题。当您将事件绑定到元素(或使用类似的东西.data()
)时,jQuery 将此信息存储在一个名为$.cache
. 当你使用 jQuery 方法来操作 DOM 时,jQuery 负责清理这些东西——因为元素和$.cache
. 因此,如果您在页面中添加了一个 div,click
使用 jQuery 将一个事件绑定到它,然后使用 删除它node.parentNode.removeChild(node);
,$.cache
则不会被清理。如果您想要证据,请在 jQuery 源代码中查找html
、和类似方法,您会发现这样的调用remove
:replaceWith
jQuery.cleanData( elem.getElementsByTagName("*") );
jQuery.cleanData( [ elem ] );
这有效地清理了一切,$.cache
以便一切都得到照顾。关键是,如果您将库用于(所有)您所做的事情,则不必担心这些事情。
不过使用html
起来很棘手——小心你传递给它的东西。如果你想传递一个新的 DOM 结构,比如
var div = $("<div>")
.attr("id", "div1")
.click(function () {
alert("clicked");
});
使用类似的东西$("#container").html(div);
实际上不会绑定该单击事件处理程序。.append
虽然使用类似 will 的东西。只是想指出这一点。(这与销毁/移除元素无关)
如果您删除该元素,DOM 将不再监听该元素内的点击。
.remove 应该可以解决问题。
$(element).parent().remove();
将从 DOM 中删除元素。