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();