2

slideUp()スライドアニメーションの後に要素を削除し、要素が削除されたにコールバックを適用するようにjQueryのメソッドを拡張しようとしています。

これまでのところ、要素を削除する次の方法があります。

$.fn.slideUpRemove = function () {
    var args = arguments;
    return this.each(function () {
        var $this = $(this);
        $.fn.slideUp.apply($this, args).promise().done(function () {
            $this.remove();
        });
    });
};

しかし、これは次のremove()ように呼び出される前にコールバックを実行します:

$('div').slideUpRemove(function () {
    console.log($('div').length);
});

要素が DOM から削除された後にコールバックを適用する最良の方法は何でしょうか?

これは、あなたが遊ぶための現在のコードのデモフィドルです

編集

私の最初のアイデアは、基本的に同じように実行される拡張機能を作成することでしたslideUp()。つまり、同じオプションを使用して、各要素に対してコールバックを実行しますが、いくつか考えた後、要素ごとのコールバックはあまり役に立たないことに気付きました。コンテキストとして設定する要素はありません。その点では、要素が削除された後に単一のコールバックを実行するのが最善の方法のようです。

4

1 に答える 1

2

すべての要素が削除されたときにハンドラーを 1 回呼び出す必要がある場合:

$.fn.slideUpRemove = function (d, c) {
    var _this = this,
        duration = $.isNumeric(d) || $.isPlainObject(d) ? d : 400,
        callback = $.isFunction(c) ? c : d;

    return this.slideUp(duration).promise().done(function () {
        _this.remove();
        if ($.isFunction(callback)) callback.call();
    });
};

http://jsfiddle.net/6sKRC/

于 2013-09-18T21:34:55.037 に答える