2011-07-03 11 views
6

मैं परिणामों की एक सूची बनाने के लिए जावास्क्रिप्ट का उपयोग कर रहा हूं। मेरे पास एक फॉर-लूप है जो कुछ डेटा पर पुनरावृत्त करता है और एक माइडाटा div बनाता है, और परिणाम div को जोड़ता है। यह कुछ इस तरह दिखता नाटक करते हैं:मैं अपनी सूची में तत्वों को कैसे छुपा सकता हूं और 'अधिक दिखाएं' सुविधा जोड़ सकता हूं?

<div id="results"> 
    <div class="mydata">data 1</div> 
    <div class="mydata">data 2</div> 
    ... 
    <div class="mydata">data 20</div> 
</div> 

मुझे क्या करना चाहते है केवल प्रदर्शन 5 परिणाम एक समय पर, और उपयोगकर्ता और अधिक देखना चाहते हैं चाहिए, वे क्लिक कर सकते हैं एक शो अगले 5 या और अधिक दिखाएं बटन (या कुछ इसी तरह)। कोई विचार?

बस स्पष्ट करने के लिए, जब भी उपयोगकर्ता "अधिक दिखाएं" क्लिक करता है, तो मैं अगले 5 तत्वों को 'अनदेखा' करना चाहता हूं, शेष शेष तत्व नहीं। इसलिए प्रत्येक क्लिक तब तक अधिक तत्वों को प्रकट करता है जब तक सभी प्रदर्शित नहीं होते हैं।

.hiddenData { display: none } 

और divs की किसी भी मात्रा कि की आवश्यक मात्रा से जोड़ने/इस वर्ग को हटाने के लिए संचालकों करने के बाद कि 5.

से अधिक के लिए देते:

+0

यदि आप jQuery का उपयोग कर रहे हैं तो मैं इस पेजिनेशन प्लगइन पर एक नज़र डालने का सुझाव दूंगा: http://plugins.jquery.com/project/pagination –

+0

@ जेम्स अलार्डिस, जो एक मीठी प्लगइन की तरह दिखता है। अगर मेरे पास एक बड़ा डेटा सेट था तो मैं निश्चित रूप से इसका उपयोग करने में देखता हूं। धन्यवाद! – whoabackoff

उत्तर

11

"अधिक पढ़ सकते हैं" आप :visible बहुत अच्छी तरह से यहाँ के साथ gt() और lt() चयनकर्ताओं का उपयोग कर सकते हैं।

निम्नलिखित सभी 5 आइटम दिखाई देने पर लिंक पर क्लिक करने और हटाने के अगले 5 परिणाम दिखाए जाएंगे।

$('.mydata:gt(4)').hide().last().after(
    $('<a />').attr('href','#').text('Show more').click(function(){ 
     var a = this; 
     $('.mydata:not(:visible):lt(5)').fadeIn(function(){ 
     if ($('.mydata:not(:visible)').length == 0) $(a).remove(); 
     }); return false; 
    }) 
); 

काम कर उदाहरण: http://jsfiddle.net/niklasvh/nTv7D/

अन्य लोगों को यहाँ क्या सुझाव दे रहे हैं के बावजूद, मैं नहीं सीएसएस का उपयोग कर तत्वों को छिपाने होगा, लेकिन जे एस में यह बजाय करते हैं, क्योंकि एक उपयोगकर्ता जे एस अक्षम है, तो और आप सीएसएस का उपयोग कर तत्वों को छुपाते हैं, वह उन्हें दिखाई नहीं देगा। हालांकि, अगर उसके पास जेएस अक्षम है, तो वे कभी छिपे नहीं होंगे, न ही वह बटन दिखाई देगा, इसलिए इसमें जगह पर एक पूर्ण नोस्क्रिप्ट फॉलबैक है + सर्च इंजन छुपी हुई सामग्री पसंद नहीं करते हैं (लेकिन अगर आप इसे छुपाएंगे तो वे इसे छुपा नहीं पाएंगे इसे डोम लोड पर करें)।

+0

के समान ही है! यह वही है जो मैं ढूंढ रहा हूं! 'फीडइन' के साथ अच्छा लग रहा है! – whoabackoff

+0

मुझे यकीन नहीं है कि क्यों, लेकिन रन टाइम पर, 'अधिक दिखाएं' एंकर ठीक से नहीं बनाया जा रहा है। जब मैं Google क्रोम के तहत निरीक्षण करता हूं तो मुझे निम्न त्रुटि मिलती है: "uncaught TypeError: ऑब्जेक्ट # में कोई विधि नहीं है 'आखिरी'" – whoabackoff

+1

@whoabackoff क्या आपको यह त्रुटि मेरी जेएसफ़ील्ड या अपने कार्यान्वयन पर मिल रही है, क्योंकि यह मेरे लिए ठीक काम कर रहा है क्रोम में 'अंतिम()' jQuery संस्करण 1.4 में जोड़ा गया था, इसलिए यदि आप पुराने संस्करण का उपयोग कर रहे हैं, तो आप '.last()' को '.filter (": last")' – Niklas

1

आप एक CSS वर्ग की तरह बना सकते हैं divs।

वर्ग को हटाने के लिए

jQuery:

$(".hiddenData").removeClass("hiddenData") 
1

की तरह कुछ के साथ एक कक्षा बनाएं:

.hidden_class{ 
    display: none; 
} 

सभी MyData div के कि आप न देखा चाहते हैं उसमें इस वर्ग जोड़ें। जब उपयोगकर्ता बटन क्लिक करता है, तो उसे अगले 5 div से हटा दें।

दोहराने हर उपयोगकर्ता क्लिक बटन

+0

यह इगोर के उत्तर – whoabackoff

1

यह काम करना चाहिए ... मुझे पता है कि यह कैसे जाता है

<script type="text/javascript"> 
    function ShowHide(id) { $("#" + id).toggle(); } 
</script> 
<div id="results"> 
    <div class="mydata">data 1</div> 
    <div class="mydata">data 2</div> 
    <div class="mydata">data 3</div> 
    <div class="mydata">data 4</div> 
    <div class="mydata">data 5</div> 

    <div style="clear:both" onclick="ShowHide('grp6')">More</div> 
    <div id="grp6" style="display:none"> 
     <div class="mydata">data 6</div> 
     <div class="mydata">data 7</div> 
     <div class="mydata">data 8</div> 
     <div class="mydata">data 9</div> 
     <div class="mydata">data 10</div> 
    </div> 
    <div style="clear:both" onclick="ShowHide('grp11')">More</div> 
    <div id="grp11" style="display:none"> 
     <div class="mydata">data 11</div> 
     <div class="mydata">data 12</div> 
     <div class="mydata">data 13</div> 
     <div class="mydata">data 14</div> 
     <div class="mydata">data 15</div> 
    </div> 
</div> 

अपने forloop में करते हैं, आप भी इन divs छिपा कंटेनर

<div style="clear:both" onclick="ShowHide('grp6')">More</div> 
    <div id="grp6" style="display:none"> 

जोड़ने के लिए आप विचार प्राप्त की है।

+0

मैं divs की मेरी सूची को संशोधित नहीं करना चाहता हूं, मैं केवल 1 'अधिक' बटन – whoabackoff

0

यहाँ आप है:

<style> 
     /*This hides all items initially*/ 
     .mydata{ 
     display: none; 
     } 
    </style> 

अब स्क्रिप्ट

<script> 
     var currentPage = 1; //Global var that stores the current page 
     var itemsPerPage = 5; 
     //This function shows a specific 'page' 
     function showPage(page){ 
      $("#results .mydata").each(function(i, elem){ 
       if(i >= (page-1)*itemsPerPage && i < page*itemsPerPage) //If item is in page, show it 
       $(this).show(); 
       else 
       $(this).hide(); 
      }); 
      $("#currentPage").text(currentPage); 
     } 
     $(document).ready(function(){ 
      showPage(currentPage); 
      $("#next").click(function(){ 
      showPage(++currentPage); 
      }); 
      $("#prev").click(function(){ 
      showPage(--currentPage); 
      }); 
     }); 
    </script> 

और एक नमूना एचटीएमएल:

<div id="results"> 
     <div class="mydata">data 1</div> 
     <div class="mydata">data 2</div> 
     <div class="mydata">data 3</div> 
     <div class="mydata">data 4</div> 
     <div class="mydata">data 5</div> 
     <div class="mydata">data 6</div> 
     <div class="mydata">data 7</div> 
     <div class="mydata">data 8</div> 
     <div class="mydata">data 9</div> 
     <div class="mydata">data 10</div> 
     <div class="mydata">data 11</div> 
     <div class="mydata">data 12</div> 
    </div> 
    <a href="javascript:void(0)" id="prev">Previous</a> 
    <span id="currentPage"></span> 
    <a href="javascript:void(0)" id="next">Next</a> 

केवल एक चीज शेष फ़ॉट मान्य करने के लिए एक पृष्ठ पर जाकर नहीं है कुल से 1 और उससे कम। लेकिन यह आसान होगा।

संपादित: यहां आप यह चल रहा है: http://jsfiddle.net/U8Q4Z/

आशा इस मदद करता है। चीयर्स।

+0

धन्यवाद चाहता हूं! यह एक महान कार्यान्वयन भी है जो 'पिछला' और 'अगला' संभालता है। केवल समस्या यह है कि यदि सूची 6 से छोटी है तो नेविगेशन लिंक अभी भी दिखाई देंगे। – whoabackoff

3

मेरा समाधान यहां है: jsFiddle

आप इस लिंक कहीं रख सकते हैं:

<a href="#" title="" id="results-show-more">show more</a> 

और निम्नलिखित कोड का उपयोग करें:

var limit = 5; 
var per_page = 5; 
jQuery('#results > div.mydata:gt('+(limit-1)+')').hide(); 
if (jQuery('#results > div.mydata').length <= limit) { 
    jQuery('#results-show-more').hide(); 
}; 

jQuery('#results-show-more').bind('click', function(event){ 
    event.preventDefault(); 
    limit += per_page; 
    jQuery('#results > div.mydata:lt('+(limit)+')').show(); 
    if (jQuery('#results > div.mydata').length <= limit) { 
     jQuery(this).hide(); 
    } 
}); 

जहां limit परिणाम की अपनी वर्तमान संख्या प्रदर्शित और per_page प्रत्येक क्लिक के साथ दिखाए गए परिणामों की संख्या है "अधिक दिखाएं" पर। यदि सभी परिणाम प्रदर्शित होते हैं तो लिंक गायब हो जाता है। देखें कि यह works on jsFiddle कैसे है।

+0

महान कार्यान्वयन जो प्रारंभिक परिणामों और परिणाम प्रति पृष्ठ के परिवर्तनीय संख्या को संभालता है। – whoabackoff

+0

@whoabackoff: thx :) – Tadeck

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