jquery空函数和事件处理程序

时间:2012-07-23 08:39:25

标签: jquery

在“空”函数(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从!C H I L D!元素中移除事件处理程序......”。但我希望事件处理程序也从div标签中删除($(“#mydiv”)。empty)。我知道有“删除”功能,但我的意图是不删除div标签。完成这项工作的最佳方法是什么?

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

非常感谢

3 个答案:

答案 0 :(得分:8)

要从元素中删除所有绑定事件处理程序,可以将特殊值"*"传递给off()方法:

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

当文档说remove events handlers时,它只说绑定事件处理程序,而不是委托那些,因为它们绑定到祖先元素(或者文件本身)不受删除影响。

如果删除的元素稍后恢复,则允许委派的处理程序按预期工作。

答案 1 :(得分: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();

答案 2 :(得分:0)

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

结合起来
http://api.jquery.com/unbind/

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

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

如果你想要删除你正在调用的元素,也不要使用.empty(),请改用.remove()。

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

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