我该如何根据时间删除这些<li>元素?</li>

时间:2012-05-18 23:08:01

标签: javascript jquery

我在页面加载时有5个<li>个元素。

每隔几秒钟随机添加其他<li>个元素。我需要删除页面上超过一分钟的<li>个元素。

我在考虑使用名为data-created-at的属性来存储添加的时间。然后在一个循环函数(通过js,在同一页面中)检查要删除的<li>元素。

如果以上是合理的方法。我应该以{毫秒为单位存储data-created-at的时间吗?

好主意?或者有更好的方法来解决这个问题吗?为任何提供代码段及其说明的人提供+1。

3 个答案:

答案 0 :(得分:4)

我不确定这是否是一个更好的选择,但是你不能在创建元素后一分钟使用setTimeout来设置元素的计划销毁吗?

有一个要求详细说明,所以我会尽我所能。这将有点伪装。

new_guy = $("<li>Some wonderful text</li>");
insert(new_guy);
setTimeout(function() { delete(new_guy); }, 60000);

您定义了一个函数insert和一个函数delete,其中insert会将您的新<li>实际插入HTML中,并调用delete 60秒后。

答案 1 :(得分:1)

以上是一种很好的方法,尤其是使用与属性中计算机上的本地时间匹配的时间戳。 (没有服务器添加属性,让JavaScript执行它以使其具有可比性。)

你的“循环”功能应该是这样的:

setInterval(function(){
  var staleTime = (new Date).getTime() - 60*1000;
  $('li[data-created-at]').find(function(){
    return $(this).data('created-at')*1 < staleTime;
  }).detach();
},1000); // check every 1 second

答案 2 :(得分:1)

嗯,jQuery的.data在设置时不使用data-属性,但我会按照你的描述完成:

setInterval(function() {
    $('li').each(function() {
        var $this = $(this);

        if(new Date().getTime() - $this.data('created-at') >= 60000) {
            // It's been a minute
            $this.remove();
        }
    });
}, 1000);

当然,如果您有一个现有的setInterval / setTimeout循环,请将其放在那里。