1

基本上,我试图通过随时取消绑定元素来优化我的 jQuery 代码,或者我需要重新绑定它们,但我有一个问题,“破坏”一个元素是否也会破坏附加到该元素的事件?

$(element).bind("click", function(){...});
$(element).parent().html("");

另外我不确定这是否是用 .html("") 完成的,我是否必须使用 .remove() 才能做到这一点?

4

2 回答 2

2

只要您使用 jQuery 方法添加/删除元素和绑定事件,一切都应该没问题。当您将事件绑定到元素(或使用类似的东西.data())时,jQuery 将此信息存储在一个名为$.cache. 当你使用 jQuery 方法来操作 DOM 时,jQuery 负责清理这些东西——因为元素和$.cache. 因此,如果您在页面中添加了一个 div,click使用 jQuery 将一个事件绑定到它,然后使用 删除它node.parentNode.removeChild(node);$.cache则不会被清理。如果您想要证据,请在 jQuery 源代码中查找html、和类似方法,您会发现这样的调用removereplaceWith

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 的东西。只是想指出这一点。(这与销毁/移除元素无关)

于 2012-10-31T04:48:12.870 回答
1

如果您删除该元素,DOM 将不再监听该元素内的点击。

.remove 应该可以解决问题。

$(element).parent().remove();

将从 DOM 中删除元素。

于 2012-10-31T04:22:18.053 回答