如何清空元素并重新使用元素并保留事件处理程序等?
<div></div>
var inp = $('<input type="text" />')
.keydown(function(){
alert('keydown');
});
$('div').append(inp);
$('div').empty();
$('div').append(inp);
当你清空元素时,所有事件处理程序等都会被销毁。你怎么能避免这种情况?
答案 0 :(得分:6)
在孩子身上使用detach:
inp.detach();
如果您有多个元素
var saved = $("div").children().detach();
来自empty
的文档:
为了避免内存泄漏,jQuery删除了其他构造,如数据 和删除之前来自子元素的事件处理程序 元素本身。
答案 1 :(得分:0)
尝试.detach()
-
$('div input[type="text"]').detach();
答案 2 :(得分:-1)
您可以尝试使用.live()
var inp = $('<input type="text" id="myinput" />');
$('#myinput').live('keydown', function(){
alert('keydown');
});
$('div').append(inp);
$('div').empty();
$('div').append(inp);
答案 3 :(得分:-1)
试试这个jsfiddle
创建inp
变量时,它是一个唯一的jQuery对象。如果要多次使用它,则需要克隆它以便能够重复使用它。将true
参数提供给clone()
方法以获取深层副本,包括事件。
答案 4 :(得分:-1)
尝试使用jQuery.live(),它会搜索新创建的元素(而keydown只会尝试在创建keydown处理程序之前创建的元素)。
<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);
有关详细信息,请参阅here。