我希望扩展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中删除元素后应用回调的最佳方法是什么?
这是 demo fiddle ,其中包含您可以使用的当前代码
编辑
我最初的想法是基本上创建slideUp()
的扩展,它将以相同的方式执行,即使用相同的选项并为每个元素运行回调,但是经过一些思考我实现了每个元素的回调没有多大用处,因为没有任何元素可以设置为上下文。在这方面,在删除元素之后运行单个回调似乎是最好的方法。
答案 0 :(得分:2)
如果在删除所有元素后应该调用一次处理程序:
$.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();
});
};