jQuery.remove()にフックインして、関数を前後に呼び出せるようにする方法はありますか?jQuery remove()コールバック?
特定のハンドラが要素にアタッチされ、時にはこれらの要素が削除されるシステムがあります(たとえば、ページ上の他のアクションによって主要素が削除されたUIウィジェットなど)。ハンドラが主要素が削除されたことを通知できる場合は、クリーンアップルーチンを少し簡単に実行できます。
jQuery.remove()にフックインして、関数を前後に呼び出せるようにする方法はありますか?jQuery remove()コールバック?
特定のハンドラが要素にアタッチされ、時にはこれらの要素が削除されるシステムがあります(たとえば、ページ上の他のアクションによって主要素が削除されたUIウィジェットなど)。ハンドラが主要素が削除されたことを通知できる場合は、クリーンアップルーチンを少し簡単に実行できます。
カスタムイベントを使用して、削除の前後に発生するカスタムイベントにハンドラを追加します。たとえば、あなたが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
:
$.when($('div').remove()).then(console.log('div removed'));
申し訳ありませんが、それは現在のケースでは良い答えではないかもしれませんが、私にとっては有用でした。 –
これでジョブが完了します。 – tponthieux
これは、*直ちに*要素を削除する方法を探していて、削除が完了した後でコールバックが発生した場合にジョブが終了するようにします。しかし、jQueryでイベントを削除することは同期イベントです。このため、ここでの答えは冗長です。同じことを達成することができます: '$( 'div')。remove(); console.log( 'div removed'); ' – Mahn
は、ここで気の利いたハックです - あなたはそれを試してみるたいかもしれません。
$('div').hide(1, function(){
// callback
$(this).remove();
});
私はちょうど関連するコード、https://github.com/jquery/jquery/blob/master/src/manipulation.js#L168に見て、それは本当にparent.removeChild周りだけ薄いラッパーです。だから@ドリューの答えに行く。 – Boldewyn
オリジナルの削除イベントをラップする以外に、回避策はありましたか? – Mahn