2011-09-15 77 views
2

如何清空一個元素並重用元素並保留事件處理程序等?如何清空()元素,但保持事件處理程序等?

http://jsfiddle.net/WrMbG/

<div></div> 

var inp = $('<input type="text" />') 
    .keydown(function(){ 
     alert('keydown'); 
    }); 

$('div').append(inp); 
$('div').empty(); 
$('div').append(inp); 

所有事件處理程序,當你空元素..等被破壞,你如何避免這種情況?

+0

有些信息在這裏http://markupjavascript.blogspot.in/2013/10/empty-remove-detach-what-is-difference.html –

回答

6

使用detach

inp.detach(); 

如果你有多個元素

var saved = $("div").children().detach(); 

從文檔上empty

爲了避免內存泄漏,jQuery在刪除 元素本身之前,從子元素中刪除其他構造,如數據 和事件處理程序。

+0

需要注意的是'$ EL。 children()。detach()'與*兩個*方法中的$ el.empty()有所不同:它保留了jQuery數據和事件處理程序,正如這裏所指出的,它也不會刪除直接的子節點'$ el'。第二個區別可能是也可能不是可取的;如果不是,你需要在'$ el.children()。detach()'後面調用'$ el.empty()'。 –

-1

你可以嘗試對孩子,而不是使用.live()

var inp = $('<input type="text" id="myinput" />'); 

$('#myinput').live('keydown', function(){ 
    alert('keydown'); 
}); 

$('div').append(inp); 
$('div').empty(); 
$('div').append(inp); 
-1

試試這個jsfiddle

當您創建inp變量,它是一個獨特的jQuery對象。如果你想多次使用它,你需要克隆它以便能夠重用它。將true參數提供給clone()方法以獲得深度複製和包含事件。

-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

+0

該代碼不起作用;該事件仍然被刪除。 – Herohtar

+0

糟糕,感謝我在提交之前沒有檢查我的代碼。 .live()在鏈接它時不喜歡它,所以我在var inp被拒絕之後附加了活處理程序。工作示例:http://jsfiddle.net/By85N/ –

0

嘗試.detach() -

$('div input[type="text"]').detach(); 
相關問題