2012-02-08 20 views
6

मुझे अपनी jQuery स्क्रिप्ट के साथ कुछ मदद चाहिए। मेरे पास एक ऐसा पृष्ठ है जो प्रत्येक 10 सेकंड को रीफ्रेश करता है और फ़ीड से नए divs को जोड़ा जा रहा है।यदि 20 से अधिक हैं तो पुरानी divs हटाएं jQuery

मेरी लिपि divs की गणना करती है और 20 से अधिक divs होने पर अंतिम div को हटा देती है। यह ठीक काम करता है अगर फ़ीड एक समय में केवल 1 div जोड़ता है। लेकिन फ़ीड एक ही समय में गुणा गुणा जोड़ सकते हैं। जब ऐसा होता है तो गणना अधिकतम 20 divs से अधिक हो सकती है। इसके साथ समस्या यह है कि मेरी स्क्रिप्ट सिर्फ 1 div को हटा देती है और 20 गुना से अधिक सभी divs नहीं।

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 

मैं वहाँ हमेशा से रहे हैं तो 20 divs सभी अतिरिक्त divs हटाने की जरूरत:

यह मेरा कोड है। मुझे आशा है कि कोई मेरी मदद कर सकता है।

उत्तर

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

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

    $autoUpdate(); 
}, 10000); 

सूचना while को if के परिवर्तन। यह पिछले एक को हटाने रहता है जब तक देखते हैं 20.

+2

इसका कारण यह है '$ articlecount' वास्तव में अपडेट नहीं करता कार्य नहीं करेगा दौरान' while';) – Supr

+0

अब यह यकीन है कि के लिए करता है। –

+0

क्षमा करें, मैंने सोचा था कि [HTMLCollection लाइव होने के लिए यह मामला था) (http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-75708506) - आपको नोटिस नहीं किया इसकी लंबाई को एक अलग चर बना दिया –

1

greater than चयनकर्ता का उपयोग करना:

var $auto_refresh = setInterval(function() { 

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

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

को लूप बॉडी के भीतर '$ articleCount' को अपडेट करने की आवश्यकता नहीं होगी? – xbonez

+0

'gt' एक jQuery फ़िल्टर है, इसलिए इसे अपने चयनकर्ता के हिस्से के रूप में उपयोग करना, डीवीएस का चयन करने के लिए सीएसएस इंजन का उपयोग करके jQuery को रोक देगा, जिसका मतलब है कि प्रदर्शन हिट होता है। '$ ('Div') के साथ जाने के लिए बेहतर। फ़िल्टर (': gt (20)') ', या कुछ समान ('।टुकड़ा() ') – Joe

+0

@ जो आपको लगता है कि प्रदर्शन यहां एक मुद्दा है? –

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

आप .slice(x) इस्तेमाल कर सकते हैं सूचकांक x से और पर सभी तत्वों को दूर करने के: http://jsfiddle.net/PLKAm/

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

अगर वहाँ <= 20 आइटम हैं तो .slice(20) एक खाली सेट देता है, तो कोड को नो-सेशन स्वचालित रूप से है।

0

सादगी के लिए संपादित:

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

मुझे नहीं पता कि यह –

+0

पर क्यों मतदान किया जाता है आप इसे सरल बना सकते हैं: [प्रत्येक फ़ंक्शन] (http://api.jquery.com/each/) में दो पैरामीटर हैं और पहला सूचकांक है, इसलिए आपकी गिनती var इसकी आवश्यकता नही है। –

+0

@ टिमब्यूथ धन्यवाद, संपादित। – wanovak

6

उपयोग jQuery.slice सब कुछ अतीत संख्या 20 है, और उन्हें बिन पाने के लिए - मृत आसान :)

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() एक में तत्वों को खोजने के लिए चयनकर्ता झुकाव गिर गया।

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 
संबंधित मुद्दे