2010-10-19 18 views
6

मैं DIVs के एक यादृच्छिक मात्रा में (कम से कम 1, 10 की अधिकतम)jQuery दिखाएँ/छिपाएँ divs और एक काउंटर

<div id="container"> 
<div class="foo">Content</div> <!-- div 1 --> 
<div class="foo">Content</div> <!-- div 2 --> 
<div class="foo">Content</div> <!-- div 3 --> 
<div class="foo">Content</div> <!-- div 4 --> 
<div class="foo">Content</div> <!-- div 5 --> 
<div class="foo">Content</div> <!-- i need this one hidden --> 
<div class="foo">Content</div> <!-- and this one --> 
</div> 

मैं पहली बार 5 divs दिखाई देना चाहते हैं (या तो .show साथ() या एक वर्ग के साथ, कोई फर्क नहीं पड़ता)। कोई भी अतिरिक्त डीआईवी छुपाया जाना चाहिए।

मैं तो साथ एक div के "समापन" अनुकरण:

$('.foo').click(function(){ 
    $(this).fadeOut('slow');  
}); 

जो क्लिक किया div निकाल देता है, सभी divs नीचे एक ऊपर ले जाने के कारण। यह मेरा वांछित प्रभाव है।

हालांकि, मुझे यहां कुछ तर्क की आवश्यकता है।

यदि मेरे पास 5 से कम डीआईवीएस है, तो बंद सुविधा को अक्षम किया जाना चाहिए। यदि मेरे पास 5 से अधिक डीवीवी हैं, तो जब एक div "बंद" होता है, तो मैं अगला "छुपा" div दिखाना चाहता हूं।

मैं हर DIV को आईडी जोड़ सकते हैं, तो जैसे "foo1" "foo2" आदि ID के साथ आवश्यक

+1

निक क्रेवर का समाधान एक अच्छा है। मैं सिर्फ यह ध्यान रखना चाहता हूं कि 'स्लाइडडाउन' और 'स्लाइडअप' का उपयोग करके आप 'fadeOut/In' का उपयोग कर रहे हैं, कम झटके के साथ अच्छा प्रभाव डालता है। – lonesomeday

+0

सलाह ध्यान दिया, बहुत सुंदर! – Ross

उत्तर

5

कुछ इस तरह काम करना चाहिए:

$("#container .foo:gt(4)").hide(); 

$("#container").delegate(".foo", "click", function() { 
    if(!$("#container .foo:hidden").length) return; 
    $(this).fadeOut('slow', function() { 
     $(this).siblings(":hidden:first").fadeIn() 
       .end().remove(); 
    }); 
}); 

You can test it out here। यह :gt(4) (0-आधारित) चयनकर्ता का उपयोग करके पिछले 5 में छुपाता है। फिर हम दक्षता के लिए .delegate() का उपयोग कर रहे हैं (हालांकि .click() भी काम करेगा)। यदि कोई और छुपा नहीं है, तो इसका कोई प्रभाव नहीं पड़ता है। यदि वहां अधिक छिपे हुए हैं, तो हमने फीड के अंत में :first:hiddden एक, और .remove() को हम पूरी तरह से फीका कर दिया है, जिसे हमने क्लिक किया है।

+0

या बदसूरत सीएसएस! .foo + .foo + .foo + .foo + .foo + .foo {display: none; } 5 से अधिक के साथ कुछ भी। foo भाई बहन छुपा जाएगा। यदि आप वैसे भी इसे हटा दें। इसमें फीडइन समर्थन नहीं है हालांकि – DoXicK

+0

@DoXicK - मुझे लगता है कि आपने '.end()' कॉल को अनदेखा किया है, यह फीकाई-इन भाई नहीं है जिसे मैं हटा रहा हूं, यह '$ (यह)' :) –

+0

होगा +2 - हमेशा के रूप में सही, धन्यवाद। – Ross

0
$('.foo').each(
    function(index,element) { 
     if(index>5) $(element).hide(); 
    } 
) 
0
$('#container div.foo').click(function() { 
    if ($(this).index() >= 5) ...; //etc 
} 
+0

यदि आपके पास हजारों परिणाम हैं, तो आप उस कार्य को हजारों बार निष्पादित करेंगे। उपयोग करने के बारे में क्या: gt (4) सीधे छिपाने के साथ संयोजन में()? यह तेजी से – DoXicK

+0

है लेकिन हम नहीं करते हैं, हमारे पास ओपी के रूप में अधिकतम 10 है - और हमारे पास प्रत्येक इंडेक्स के आधार पर कोड को संशोधित करने की क्षमता है ... वैसे भी –

संबंधित मुद्दे