Jquery 如何清空()元素,但保留事件处理程序等?
如何清空元素、重用元素并保留事件处理程序等Jquery 如何清空()元素,但保留事件处理程序等?,jquery,Jquery,如何清空元素、重用元素并保留事件处理程序等 变量inp=$('') .keydown(函数(){ 警报(“按键关闭”); }); $('div')。追加(inp); $('div').empty(); $('div')。追加(inp); 清空元素时,所有事件处理程序等都将被销毁。。如何避免这种情况?您可以尝试使用 var inp=$(''); $('#myinput').live('keydown',function()){ 警报(“按键关闭”); }); $('div')。追加(inp)
变量inp=$('')
.keydown(函数(){
警报(“按键关闭”);
});
$('div')。追加(inp);
$('div').empty();
$('div')。追加(inp);
清空元素时,所有事件处理程序等都将被销毁。。如何避免这种情况?您可以尝试使用
var inp=$('');
$('#myinput').live('keydown',function()){
警报(“按键关闭”);
});
$('div')。追加(inp);
$('div').empty();
$('div')。追加(inp);
在孩子身上使用:
inp.detach();
如果有多个元素
var saved = $("div").children().detach();
从
上的文档中:
为了避免内存泄漏,jQuery删除了其他结构,如数据
和子元素中的事件处理程序,然后删除
元素本身
试试这个
创建inp
变量时,它是唯一的jQuery对象。如果您想多次使用它,您需要克隆它以便能够重用它。将true
参数提供给clone()
方法以获取深度副本,包括事件。尝试使用jQuery.live(),它搜索新创建的元素(而keydown将只尝试在创建keydown处理程序之前创建的元素)
var inp=$('');
//编辑:链接live时,live将不起作用,因此需要单独附加
$(“输入”).live('keydown',function(){
警报(“按键关闭”);
});
$('div')。追加(inp);
$('div').empty();
$('div')。追加(inp);
有关详细信息,请参阅。尝试.detach()
-
$('div input[type="text"]').detach();
哎呀,感谢我在提交之前没有检查我的代码。live()不喜欢链接它,所以在var inp被删除后,我附加了live处理程序。这里的工作示例:请注意,
$el.children().detach()
与$el.empty()
有两个不同之处:它保留了jQuery数据和事件处理程序,如本文所述,并且不会删除作为$el
的直接子级的文本节点。第二个差异可能是可取的,也可能不是可取的;如果不是,则在$el.children().detach()之后调用$el.empty()
。
var saved = $("div").children().detach();
<div></div>
var inp = $('<input type="text" />');
// edit: live won't work when chaining it, so attaching separately
$("input").live('keydown', function(){
alert('keydown');
});
$('div').append(inp);
$('div').empty();
$('div').append(inp);
$('div input[type="text"]').detach();