2011-09-29 19 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

カスタムイベントを使用して、削除の前後に発生するカスタムイベントにハンドラを追加します。たとえば、あなたがjQuery.when()使用することができます

$(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

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

申し訳ありませんが、それは現在のケースでは良い答えではないかもしれませんが、私にとっては有用でした。 –

+0

これでジョブが完了します。 – tponthieux

+3

これは、*直ちに*要素を削除する方法を探していて、削除が完了した後でコールバックが発生した場合にジョブが終了するようにします。しかし、jQueryでイベントを削除することは同期イベントです。このため、ここでの答えは冗長です。同じことを達成することができます: '$( 'div')。remove(); console.log( 'div removed'); ' – Mahn

2

は、ここで気の利いたハックです - あなたはそれを試してみるたいかもしれません。

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