2011-09-29 64 views
15

有沒有官方的方法來jQuery.remove(),以便可以之前/之後調用一個函數?jQuery remove()回調?

我有一個系統,某些處理程序會附加到元素上,有時會刪除這些元素(例如,其主要元素通過頁面上的某些其他操作被刪除的UI小部件)。如果可以通知處理程序他們的主要元素已被刪除,那麼我可以更輕鬆地運行清理程序。

+0

我只是進去看了相關代碼,https://github.com/jquery/jquery/blob/master/src/manipulation.js#L168,它實際只是parent.removeChild瘦包裝。所以請跟隨@德魯的回答。 – Boldewyn

+0

除了包裝原始刪除事件外,您是否找到任何解決辦法? – Mahn

回答

5

使用自定義事件,將處理程序附加到在刪除之前/之後觸發的自定義事件。例如,

$(document).bind('remove', function(event, dom){ 

    $(document).trigger('beforeRemove', [ dom ]); 
    $(dom).remove(); 
    $(document).trigger('afterRemove', [ dom ]); 
}); 

$(document).trigger('remove', 'p'); //Remove all p's 
17

您可以使用jQuery.when()

$.when($('div').remove()).then(console.log('div removed')); 
+0

對不起,也許這在目前的情況下不是很好的答案,但對我有用。 –

+0

這可以完成工作。 – tponthieux

+3

如果您正在尋找一種方法來立即刪除元素*,並在刪除完成後發生回調火災,則可以完成此工作。但是在jQuery中刪除事件是一個同步事件,所以爲此目的,這裏的答案是多餘的:您可以實現完全相同的事情:'$('div')。remove(); ('div removed');' – Mahn

2

這裏有一個漂亮的黑客 - 你可能想試一試。

$('div').hide(1, function(){ 
    // callback 
    $(this).remove(); 
});