【问题标题】:JQuery remove :last-child and .prependJQuery 删除 :last-child 和 .prepend
【发布时间】:2014-02-14 05:52:12
【问题描述】:

我有下一个 jq 脚本:

setInterval(function(){
  $("#box div:last-child").fadeOut(200);
  $.post('_ajax.php',function(mr){
    $("#box").prepend(mr);
  });
}, 1000);

和下一个 html:

<div id="box">
   <div>23:56:16<span>xxxx</span></div>
   <div>23:56:16<span>xxxx</span></div>
   <div>23:56:16<span>xxxx</span></div>
   <div>23:56:16<span>xxxx</span></div>
</div>

所以,我需要每秒从 #box 中删除最后一个 &lt;div&gt; 和通过 ajax 获得的 .prepend 新 div。 但是此代码仅在第一秒有效。 IE。页面加载后 1 秒后,从 #box 删除最后一个 &lt;div&gt;,但下一次只有 .prepend 有效。

另外,我需要知道如何删除最后几个子 div。

【问题讨论】:

  • 你知道 .post() 是异步的吧?
  • 是的,我知道。有什么问题吗?
  • 您的代码会每秒删除最后一个 div,但不能保证 .post() 请求会及时完成。
  • @j08691 这对我来说并不重要。但是……你可以推荐我用什么?

标签: jquery setinterval prepend css-selectors


【解决方案1】:

如果您要淡出元素而不是删除它,则会出现问题。每次它获取元素时,它都会淡出已经淡出的元素。尝试这个。将完整的回调添加到淡入淡出并从 DOM 中移除元素。

setInterval(function(){
  $("#box div:last-child").fadeOut(200, function() { $(this).remove(); });
  $.post('_ajax.php',function(mr){
    $("#box").prepend(mr);
  });
}, 1000);

另外,正如 j08691 在他的评论中指出的那样,$.post 是异步的,这意味着请求可能会也可能不会在那 1 秒内完成。如果它很慢,您将删除元素而不附加任何元素。只有当您准备好添加新元素时,您才可以考虑淡出元素,如下所示:

setInterval(function(){
      $.post('_ajax.php',function(mr){
        $("#box div:last-child").fadeOut(200, function() { $(this).remove(); });
        $("#box").prepend(mr);
      });
    }, 1000);

如果您有兴趣从框的末尾删除一定数量的元素,您可以执行以下操作:

$("#box div").slice(-3).remove();

您可以在此处阅读 .slice http://api.jquery.com/slice/

【讨论】:

  • 谢谢!最后几个 div 怎么样?
  • 几个是什么意思?最后只有 1 个 div。如果您进行此更改,则每秒都会删除当前最后一个 div。
  • 是的,我知道。这只是一个问题,如果我需要删除 3 个 las div,我需要使用哪个功能?
  • 更新的答案也解决了这个问题。
猜你喜欢
  • 2013-03-03
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多