2012-02-08 16 views
6

jQuery komut dosyam için yardıma ihtiyacım var. Her 10 saniyede bir yenilenen bir sayfam var ve bir özet akışından yeni div'ler ekleniyor.20'den fazla varsa eski divleri silin | jQuery

Scriptim, div'leri sayar ve 20'den fazla div olduğunda son div'i kaldırır. Feed, bir seferde yalnızca 1 div eklerse bu iyi çalışır. Ancak özet akışı aynı zamanda div'ları çoğaltabilir. Bu olduğunda, sayım en fazla 20 div değerini geçebilir. Buradaki problem, benim betiğimin sadece 20 sayımı aşan tüm divleri değil, 1 div'i silmesi. Hep 20 div'ler vardır böylece tüm ekstra div'leri kaldırmak gerekir

var $auto_refresh = setInterval(function() { 
    var $articleCount = $('div').length; 

    if ($articleCount > 20) { 
     $('div:last-child').remove(); 
    } 

    $autoUpdate(); 
}, 10000); // refresh every 10000 milliseconds for new items 

:

Bu benim kodudur. Umarım birileri bana bu konuda yardımcı olabilir.

cevap

3
var $auto_refresh = setInterval(function() { 
    var $articleCount = $('div').length; 

    while ($articleCount > 20) { 
     $('div:last-child').remove(); 
     $articleCount = $('div').length; 
    } 

    $autoUpdate(); 
}, 10000); 

Bildirimi while için if değişimi. 20.

+2

Bu $ articlecount' aslında güncelleme gelmez 'çünkü işe yaramaz' while';) – Supr

+0

Şimdi kesin yapar. –

+0

üzgünüm, bu [HTMLCollection canlı olmak] için bir durum olduğunu düşündüm (http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-75708506) - farketmediniz uzunluğunu –

1

kalmayıncaya kadar bu greater than seçicinin kullanılması sonuncusu silme tutar: http://jsfiddle.net/PLKAm/: Sen endeksi x gelen ve tüm öğeleri kaldırmak için .slice(x) kullanabilirsiniz

var $auto_refresh = setInterval(function() { 

    $('div:gt(20)').remove(); 

    $autoUpdate(); 
}, 10000); // refresh every 10000 milliseconds for new items 
+0

, döngü gövdesindeki '$ articleCount 'öğesini güncellemeye gerek yoktu? – xbonez

+0

': gt' bir jQuery filtresidir, bu nedenle seçicinizin bir parçası olarak kullanmak, bir performans isabeti anlamına gelen divleri seçmek için CSS motorunu kullanarak jQuery'yi durduracaktır. '$ (' Div '). Filter (': gt (20) ') 'ile ya da benzer bir şeyle ('.slice() ') – Joe

+0

@Joe Performansın burada bir sorun olduğunu mu düşünüyorsunuz? –

0
var $auto_refresh = setInterval(function() { 

    while ($('div').length > 20) { 
     $('div:last-child').remove(); 
    } 

    $autoUpdate(); 
}, 10000); // refresh every 10000 milliseconds for new items 
0
while ($articleCount > 20) {    
     $('div:last-child').remove(); 
     $articleCount = $('div').length; 
    } 
2

. <= 20 ürün varsa

$("div").slice(20).remove(); 

sonra .slice(20) boş kümesi döndürür, böylece kod otomatik no-operasyon. Basitlik için

0

Düzenlendi:

$('div').each(function(count){ 
    if(count >= 20){ 
     $(this).remove(); 
    } 
}); 
+0

Bunun neden oy verildiğini bilmiyorum –

+0

Bunu basitleştirebilirsiniz: [her işlev] (http://api.jquery.com/each/) iki parametreye sahiptir ve ilki indeks, bu nedenle sayım var gerekli değil. –

+0

@ TimBüthe Teşekkürler, düzenledi. – wanovak

6

Kullanım jQuery.slice herşey geçmiş sayı 20 ve bin onları almak - ölü kolay Şunları kullanabilirsiniz :)

var $auto_refresh = setInterval(function() { 
    $('div').slice(20).remove(); 
    $autoUpdate(); 
}, 10000); // refresh every 10000 milliseconds for new items 

http://api.jquery.com/slice/

0

:gt() Seçici elemanların birini bulmak için düştü. sırasında

var $auto_refresh = setInterval(function() { 
    var nToDelete = $('div').length - 20; // Calculate how many there are to delete...  
    if(nToDelete > 0) $('div:gt(" + nToDelete + ")').remove(); // and delete them. 
    $autoUpdate(); 
}, 10000); 
0
var remove21 = function() { 
    if ($('div').length > 20) { 
     $('div:nth-child(21)').remove(); 
     remove21(); 
    } 
} 

var $auto_refresh = setInterval(function() { 

    remove21(); 

    $autoUpdate(); 
}, 10000); // refresh every 10000 milliseconds for new items 
İlgili konular