2009-02-17 20 views
20

當你刪除()一個元素並在其他地方追加()時,jQuery會發生什麼?當你移除()一個元素並在其他地方追加()時,事件是否會在jQuery中丟失?

看起來這些事件已被解除掛鉤 - 就好像您只是插入了新的html(我猜是發生了什麼)。但它也有可能我的代碼有一個錯誤 - 所以我只想在我繼續之前驗證這種行爲。

如果是這種情況 - 是否有任何簡單的方法可以將事件重新連接到HTML的那一部分,或者移動元素而不會丟失事件的其他方法。

回答

28

是的,jQuery與remove()的方法是解除與jQuery自己的bind綁定的所有內容(以防止內存泄漏)。

但是,如果您只是想在DOM中移動某些內容,則不必首先使用remove()。只是append你的心臟的內容,事件綁定堅持圍繞:)

例如,粘貼到您的螢火蟲在此頁:

$('li.wmd-button:eq(2)').click(function(){ alert('still here!') }).appendTo(document.body) 

現在向下滾動到該頁面的底部並點擊現在埋在SO頁腳下的小globy圖標。您將獲得alert。所有,因爲我首先注意不到remove

0

使用jQuery1.3.1生活()綁定的事件,你將不必擔心這個..

更新:現場活動現在已被棄用,但你可以從$同樣的效果(文件) 。上()。

+0

所以是我原來的問題?究竟發生了什麼。我現在要檢查'現場' – 2009-02-17 23:20:24

+0

絕對有益於瞭解現場 - 但要小心這裏的警告http://docs.jquery.com/Events/live#typefn – 2009-02-17 23:39:57

+1

不適用如果您正在使用特定的dom對象而不是選擇器。這也是我的第一個想法。 – 2013-03-28 19:37:03

51

jQuery的分離()函數是一樣刪除()但保留了事件處理程序中,它返回該對象。如果您必須移除物品並將其放置在其他地方,則可以使用該物品。

var objectWithEvents = $('#old').detach(); 
$('#new').append(objectWithEvents); 

檢查API文檔在這裏:http://api.jquery.com/detach/

相關問題