在“空”函数(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”制作的构造?
非常感谢
答案 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()。“