Jquery .remove()不更新DOM

时间:2015-07-22 21:02:27

标签: javascript jquery dom

我正在尝试使用.remove() jQuery方法

从DOM中删除元素

基本上我正在解析列表并删除某些元素。然后,我重新整理列表,以便对其余元素进行一些处理。

但是,列表大小的简单打印输出给我的印象是要删除的元素未被删除

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

在删除元素之前和之后,我得到相同大小的列表...

我的方法有问题吗?

谢谢!

2 个答案:

答案 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:

https://jsfiddle.net/upkkLq2m/2/