扩展jQuery';s slideUp()以在动画后删除元素

扩展jQuery';s slideUp()以在动画后删除元素,jquery,Jquery,我希望扩展jQuery的slideUp()方法,在幻灯片动画之后删除元素,并在删除元素之后应用回调 到目前为止,我已使用此方法删除元素: $.fn.slideUpRemove = function () { var args = arguments; return this.each(function () { var $this = $(this); $.fn.slideUp.apply($this, args).promise().done(f

我希望扩展jQuery的
slideUp()
方法,在幻灯片动画之后删除元素,并在删除元素之后应用回调

到目前为止,我已使用此方法删除元素:

$.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()
,它将以相同的方式执行,即使用相同的选项并为每个元素运行回调,但是经过一些思考后,我意识到每个元素的回调没有多大用处,因为没有任何元素可以设置为上下文。注意,删除元素后运行一次回调似乎是最好的方法。

如果在删除所有元素后应调用一次处理程序:

$.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();
    });
};

是否应为每个元素调用一次回调?或者在所有动画完成后执行一次?@未定义,因为我希望它主要以
slideUp()
的形式运行,理想情况下,每个元素执行一次,但如果结果太麻烦,我会选择另一个选项只是。。。删除元素后执行回调。由于删除一个元素是一个同步操作,您可以直接在下面的行中执行它。不要忘记从传入的参数中删除回调。@KevinB所以您建议我在自定义方法
slideUpRemove()
?否之外应用回调。。如果我将回调作为单个参数传递,那么这将起作用,对吗?但是我无法传递幻灯片的选项animation@koala_dev是,是否要传递持续时间和回调?这两个参数?我看到您更新了答案,允许为
slideUp()
使用一个对象参数,这正是我在午餐休息时所想的,而且我还决定一次回调运行最好,而不是每个元素一次,所以您的解决方案正是我所需要的,谢谢。