1

<li>ページの読み込みに5つの要素があります。

他の<li>要素は、秒数ごとにランダムに追加されます。<li>1分以上ページに表示されている要素を削除する必要があります。

data-created-at追加された時刻を格納するという属性を考えていました。<li>次に、削除する要素をチェックするループ関数(jsを介して同じページ内)を用意します。

上記の場合は適切なアプローチです。data-created-at時間をミリ秒単位で保存する必要がありますか?

良いアイデア?それとも、これについてもっと良い方法がありますか?説明とともにコードスニペットを提供する人には+1。

4

3 に答える 3

4

これがより良い代替手段であるかどうかはわかりませんがsetTimeout、要素を作成してから1分後に、要素の計画的な破棄を設定するために使用できませんでしたか?

精巧な依頼がありましたので、頑張ります。これはやや疑似コードになります。

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

insert関数と関数を定義した場合、insertは新しいものをHTMLにdelete実際に挿入し、60秒後に呼び出されます。<li>delete

于 2012-05-18T23:13:24.643 に答える
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
于 2012-05-18T23:09:49.920 に答える
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ループがある場合は、代わりにそこに配置します。

于 2012-05-18T23:11:19.193 に答える