2

<li>1分以上経過している要素を削除しようとしています。それぞれに属性を持つ要素が<li>含まれています。この値はサーバー側でデータベースに保存されました。<a>data-created-atcreated_at

ページが読み込まれると、データベースからのレコードが表示されます。

<ul id="foobar">
  <% @foos.each do |foo| %>
    <li><%= link_to 'Foobar', '#', :'data-created-at' => foo.created_at.to_i %></li>
  <% end %>
</ul>

<li>私のJSは、要素を削除する前に、システム(サーバーではなくブラウザー)の時間を比較しようとしています。

$(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
});

<li>JSで要素を動的に削除する必要があるため、これは問題です。Date().getTime()ブラウザ/システムに基づいているので。created_atサーバーからレンダリングされた値を処理する場合は、少し一貫性がありません。

これを機能させる方法はありますか?

4

1 に答える 1

2

はい、@Lilinaには良いアプローチがあります。HTMLドキュメントの最後に非表示の入力としてタイムスタンプを挿入します。これにより、最後にロードされます。次に、ドキュメントレディハンドラーを追加して、ブラウザー時間とシステム時間の間のオフセットを計算します(非表示の入力タグから)。このオフセットをすべてのcreated-at属性に適用します。

于 2012-05-19T02:27:36.310 に答える