基本上,我试图通过在任何需要的时候解绑元素来优化我的jQuery代码,或者我需要重新绑定它们,但我有一个问题,“销毁”一个元素也会销毁附加到该元素的事件吗?
$(element).bind("click", function(){...});
$(element).parent().html("");
我也不确定这是否是使用.html("")完成的,我必须使用.remove()来完成吗?
发布于 2012-10-31 12:48:13
只要使用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
这样的东西就可以了。只是想指出这一点。(这与销毁/删除元素无关)
发布于 2012-10-31 12:22:18
如果删除该元素,DOM将不再侦听该元素内的单击。
.remove应该可以做到这一点。
$(element).parent().remove();
将从DOM中删除该元素。
https://stackoverflow.com/questions/13151201
复制相似问题