我在页面加载时有5个<li>
个元素。
每隔几秒钟随机添加其他<li>
个元素。我需要删除页面上超过一分钟的<li>
个元素。
我在考虑使用名为data-created-at
的属性来存储添加的时间。然后在一个循环函数(通过js,在同一页面中)检查要删除的<li>
元素。
如果以上是合理的方法。我应该以{毫秒为单位存储data-created-at
的时间吗?
好主意?或者有更好的方法来解决这个问题吗?为任何提供代码段及其说明的人提供+1。
答案 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
循环,请将其放在那里。