我正在尝试使用.remove()
jQuery方法
基本上我正在解析列表并删除某些元素。然后,我重新整理列表,以便对其余元素进行一些处理。
但是,列表大小的简单打印输出给我的印象是要删除的元素未被删除
$list = $(".elements_list");
alert( $list.size());
$list.each(function(){
if ( $(this).data("quantity") == 0)
{
$(this).slideUp(1000,function(){
$(this).remove();
});
}
});
change_background_colors();
在这个处理之后,我打电话给另一个在开头有以下代码的函数:
function change_background_colors() {
$list = $(".elements_list");
alert($list.size());
...
}
在删除元素之前和之后,我得到相同大小的列表...
我的方法有问题吗?
谢谢!
答案 0 :(得分:1)
直到1000毫秒后动画完成后才会删除该元素。等到那时才计算元素。
编辑:这是在所有动画完成之前延迟的更复杂方式:
$list = $(".elements_list");
var n = 0;
$list.each(function(){
if ( $(this).data("quantity") == 0) {
n = n + 1; // one more callback to wait for
$(this).slideUp(1000,function(){
$(this).remove();
n = n-1;
checkIfAllDone();
});
}
});
function checkIfAllDone(){
if(n===0){ // be sure that n was declared in the same scope as this function
change_background_colors();
}
}
答案 1 :(得分:1)
如果你在setTimeOut函数中调用大小警报,你会看到
$list = $(".elements_list");
alert($list.size());
$list.each(function () {
if ($(this).data("quantity") == 0) {
$(this).slideUp(1000, function () {
$(this).remove();
});
}
});
setTimeout(function () {
$list = $(".elements_list");
alert($list.size());
}, 2000);
<强>的jsfiddle:强>