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

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

非常感谢提前

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

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

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

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

试试这个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(); 

如果我正确读取你不想删除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()。“