如何清空()元素,但保留事件处理程序等



如何清空元素并重用元素并保留事件处理程序等?

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参数以获得深度复制,包括事件。

最新更新