6

在“空”函数(http://api.jquery.com/empty/)的jquery文档中有以下语句:

"To avoid memory leaks, jQuery removes other constructs such as data and event handlers
from the child elements before removing the elements themselves."

文本说:“...... jQuery 从 !CHILD! 元素中删除事件处理程序......”。但我希望事件处理程序也从 div 标签 ($("#mydiv").empty) 中删除。我知道有“删除”功能,但我的意图是不删除 div 标签。完成这项工作的最佳方法是什么?

另一件事是:
当他们说“删除事件处理程序”时。他们是只删除用“bind”制作的构造,还是也删除用“delegate”制作的构造?

非常感谢提前

4

3 回答 3

9

To remove all bound event handlers from an element, you can pass the special value "*" to the off() method:

$("#mydiv").empty().off("*");

When the documentation says remove events handlers, it only speaks of bound event handlers, not delegated ones, since these are bound to an ancestor element (or the document itself) which is not impacted by the removal.

This allows delegated handlers to keep working as intended if the removed element is reinstated later.

于 2012-07-23T08:47:03.007 回答
1

如果我没看错你不想删除 div 标签,你只想删除所有数据和处理程序,在这种情况下将 .empty() 与:

http://api.jquery.com/unbind/

但是请注意:“使用 .bind() 附加的事件处理程序可以使用 .unbind() 删除。(从 jQuery 1.7 开始,首选 .on() 和 .off() 方法来附加和删除元素上的事件处理程序。 ) 在最简单的情况下,没有参数,.unbind() 删除所有附加到元素的处理程序:"

使用与您绑定事件的方式相对应的删除工具。

如果你想删除你调用的元素,不要使用 .empty(),而是使用 .remove()。

http://api.jquery.com/remove/

“与 .empty() 类似,.remove() 方法将元素从 DOM 中取出。当您想要删除元素本身以及其中的所有内容时,请使用 .remove()。除了元素本身,所有绑定事件和与元素关联的 jQuery 数据被移除。要移除元素而不移除数据和事件,请改用 .detach()。

于 2012-07-23T08:50:03.927 回答
1

试试这个 jQuery 代码;

 jQuery('#element').bind('click',function(){
    console.log('clicked');
    }).on('remove',function(){
       console.log('element removed');
       jQuery(this).unbind('click').off('remove');
    });

    jQuery('#element').remove();
于 2014-10-08T07:32:58.147 回答