如何清空元素并重用元素并保留事件处理程序等?
http://jsfiddle.net/WrMbG/<div></div>
var inp = $('<input type="text" />')
.keydown(function(){
alert('keydown');
});
$('div').append(inp);
$('div').empty();
$('div').append(inp);
当清空元素时,所有事件处理程序等都会被销毁。怎样才能避免这种情况呢?
在子节点上使用detach:
inp.detach();
如果你有多个元素
var saved = $("div").children().detach();
摘自empty
的文档:
为了避免内存泄漏,jQuery删除了数据等其他结构的子元素中的事件处理程序
元素本身。
try .detach()
-
$('div input[type="text"]').detach();
您可以尝试使用.live()
var inp = $('<input type="text" id="myinput" />');
$('#myinput').live('keydown', function(){
alert('keydown');
});
$('div').append(inp);
$('div').empty();
$('div').append(inp);
尝试使用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);
试试这个
创建inp
变量时,它是一个惟一的jQuery对象。如果您希望多次使用它,则需要克隆它以便能够重用它。为clone()
方法提供true
参数以获得深度复制,包括事件。