基本上我正在尝试通过解绑元素来随时优化我的jQuery代码,或者我需要重新绑定它们,但我有一个问题,“破坏”元素是否也会破坏附加到该元素的事件?
$(element).bind("click", function(){...});
$(element).parent().html("");
另外我不确定这是用.html(“”)完成的,我是否必须使用.remove()来完成这个技巧?
答案 0 :(得分:2)
只要你使用jQuery方法添加/删除元素和绑定事件,一切都应该没问题。将事件绑定到元素(或使用.data()
之类的东西)时,jQuery会将此信息存储在名为$.cache
的位置。当你使用jQuery方法来操作DOM时,jQuery负责清理这些东西 - 因为元素和$.cache
之间确实没有实际的连接。因此,如果您向页面添加div,使用jQuery将click
事件绑定到该页面,然后使用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
之类的东西。只是想指出这一点。 (这与破坏/删除元素无关)
答案 1 :(得分:1)
如果删除元素,DOM将不再侦听该元素内的点击。
。删除应该可以解决问题。
$(element).parent().remove();
将从DOM中删除该元素。