我试图删除<li>
元素,如果它们已经存在超过一分钟。每个<li>
都包含<a>
元素,该元素具有data-created-at
属性。此created_at
值已存储在服务器端的数据库中。
页面加载时,会显示数据库中的记录。
<ul id="foobar">
<% @foos.each do |foo| %>
<li><%= link_to 'Foobar', '#', :'data-created-at' => foo.created_at.to_i %></li>
<% end %>
</ul>
我的JS试图在删除<li>
元素之前比较系统的(浏览器,而不是服务器)时间:
$(document).ready(function(){
setInterval(function() {
$('#foobar a').each(function() {
if(new Date().getTime() - $(this).data('created-at') >= 60000) {
// It's been a minute
$(this).parents('li').fadeOut()
}
});
}, 10000); // 10 seconds
});
这是一个问题,因为我需要JS来动态删除任何<li>
元素。由于Date().getTime()
基于浏览器/系统。如果它处理从服务器呈现的created_at
值,则有点不一致。
我有什么想法可以让它发挥作用吗?
答案 0 :(得分:2)
是的@Lilina有一个很好的方法。将时间戳作为隐藏输入插入HTML文档的末尾。这确保它最后加载。然后添加一个文档就绪处理程序来计算浏览器时间和系统时间之间的偏移量(来自隐藏的输入标记)。将此偏移量应用于所有创建的属性。