【问题标题】:jQuery slideUp().remove() doesn't seem to show the slideUp animation before remove occursjQuery slideUp().remove() 在删除发生之前似乎没有显示 slideUp 动画
【发布时间】:2010-09-23 09:48:25
【问题描述】:

我有这行 JavaScript,我看到的行为是 selectedLi 立即消失而没有“向上滑动”。这不是我预期的行为。

我应该怎么做才能让selectedLi 在被移除之前向上滑动?

selectedLi.slideUp("normal").remove();

【问题讨论】:

    标签: javascript jquery animation


    【解决方案1】:

    是否可以通过将 remove 调用放入到 slideUp 的回调 arg 中来修复它?

    例如

    selectedLi.slideUp("normal", function() { $(this).remove(); } );
    

    【讨论】:

    【解决方案2】:

    你需要更明确:而不是说“这个”(我同意应该可以),你应该这样做:

    $("#yourdiv").slideUp(1000, function() {
        $(this).remove();
    });
    

    【讨论】:

    • SORRY = 我忘了删除我的 id,应该是:$('#yourdiv').slideUp(1000, function(){ $('#yourdiv').remove(); }) ;
    • 使用 $(this) 代替 $("#yourdiv") 更加优化,因为 jQuery 不需要查找节点。
    • 使用 $("#yourdiv") 而不是 $(this) 是完全多余的,这不是这段代码修复 OP 问题的原因。这段代码解决了这个问题,因为它使用了complete 回调。
    【解决方案3】:

    最简单的方法是调用 slideUp 中的“remove()”函数作为参数,就像其他人所说的那样,如下例所示:

    $("#yourdiv").slideUp("normal", function() {
        $(this).remove();
    });
    

    必须在匿名函数() 中调用它,以防止在 slideUp 结束之前执行 remove()。另一种等效的方法是使用 jQuery 函数“promise()”。更适合那些喜欢不言自明的代码的人,比如我 ;)

    $("#yourdiv").slideUp("normal").promise().done(function() {
        $(this).remove();
    });
    

    【讨论】:

      【解决方案4】:

      使用 Promise,您还可以等待多个动画完成,例如:

      selectedLi.slideUp({duration: 5000, queue: false})
      .fadeOut({duration: 3000, queue: false})
      .promise().done(function() {
          selectedLi.remove()
      })
      

      【讨论】:

        【解决方案5】:
        selectedLi.slideUp(200, this.remove);
        

        【讨论】:

        • 我测试过-向上滑动后不会删除元素。
        • 有效地隐藏了元素,但实际上并没有从 DOM 中移除它。
        猜你喜欢
        • 2012-03-12
        • 1970-01-01
        • 2013-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多