2011-09-29 59 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(); 
});