销毁元素会破坏该元素的绑定?

时间:2012-10-31 04:16:46

标签: javascript jquery

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

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

另外我不确定这是用.html(“”)完成的,我是否必须使用.remove()来完成这个技巧?

2 个答案:

答案 0 :(得分:2)

只要你使用jQuery方法添加/删除元素和绑定事件,一切都应该没问题。将事件绑定到元素(或使用.data()之类的东西)时,jQuery会将此信息存储在名为$.cache的位置。当你使用jQuery方法来操作DOM时,jQuery负责清理这些东西 - 因为元素和$.cache之间确实没有实际的连接。因此,如果您向页面添加div,使用jQuery将click事件绑定到该页面,然后使用node.parentNode.removeChild(node);将其删除,则不会清除$.cache。如果你想要证据,请查看jQuery源代码中的htmlremovereplaceWith和类似的方法,你会发现这样的调用:

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中删除该元素。