簡體   English   中英

當您 remove() 一個元素並在其他地方 append() 它時,jQuery 中的事件會丟失嗎?

[英]Are events lost in jQuery when you remove() an element and append() it elsewhere?

當你remove()一個元素並append()它在別處時,jQuery 會發生什么?

似乎這些事件沒有掛鈎 - 好像您只是插入新的 html(我猜這就是發生的事情)。 但我的代碼也可能有錯誤 - 所以我只是想在繼續之前驗證這種行為。

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

jQuery detach()函數與remove()相同,但在它返回的對象中保留了事件處理程序。 如果您必須刪除該項目並將其與所有可以使用的東西一起放置在其他地方。

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

在此處查看 API 文檔:http: //api.jquery.com/detach/

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

但是,如果您只想在 DOM 中移動某些內容,則不必先remove()它。 只需append到您心中的內容,事件綁定就會一直存在:)

例如,將其粘貼到此頁面上的 firebug 中:

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

現在向下滾動到此頁面的底部,然后單擊現在埋在 SO 頁腳下的小地球圖標。 您將收到alert 這一切都是因為我注意不要先remove它。

使用 jQuery1.3.1 live() 綁定事件,你不必擔心這個..

更新:現在不推薦使用實時事件,但您可以從 $(document).on() 獲得相同的效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM