在"empty“函数(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)中删除。我知道有" remove“函数,但我的目的是不删除div标签。完成这项工作的最好方法是什么?
另一件事是:
当他们说“删除事件处理程序”时。它们是只删除使用"bind“创建的构造,还是也删除使用"delegate”创建的构造?
提前道谢
发布于 2012-07-23 16:47:03
要从元素中删除所有绑定的事件处理程序,可以向off()方法传递特殊值"*":
$("#mydiv").empty().off("*");当文档提到remove events handlers时,它只提到绑定的事件处理程序,而不是委托的事件处理程序,因为它们绑定到不受删除影响的祖先元素(或文档本身)。
这允许委托处理程序在以后恢复已删除元素的情况下继续按预期工作。
发布于 2012-07-23 16:50:04
如果我没看错的话,您不希望删除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()。
发布于 2014-10-08 15:32:58
试试这段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();https://stackoverflow.com/questions/11609053
复制相似问题