2012-08-14 16 views
6

मैं एक सूची में विकल्पों की संख्या गिनने की कोशिश कर रहा हूं। हालांकि, इनपुट बॉक्स में दर्ज खोज टेक्स्ट के कारण कुछ विकल्प छुपाए गए हैं।सूची में विकल्पों की संख्या की गणना करें

मैंने .size() और। लम्बाई में देखना शुरू कर दिया लेकिन केवल छिपे हुए लोगों की बजाय पूरी सूची प्राप्त नहीं कर रही थी। सरलीकृत करने के लिए, मैंने छुपा विकल्पों को खोजने और खोजने के लिए इसे बदल दिया है (मैं उपयोग कर सकता हूं: बाद में नहीं)।

$('#txtListSearch').keyup(function(evt) { 
    if($(this).val().length < 1) { 
     $('#selContactLists option').show(); 
    } else { 
     $('#selContactLists option:not(:contains("' + $(this).val() + '"))').hide(); 

     if($('#selContactLists').size()) { 
      $('#selContactLists option:contains("' + $(this).val() + '")').first().attr('selected', 'selected');     
     } else { 
     } 
    } 
    console.log($('#selContactLists option').filter(':hidden')); 
}); 

मैंने यह भी कोशिश की है: console.log ($ ('# selContactLists विकल्प: छुपा')); मुझे वह नंबर कभी नहीं मिलता है जिसकी मुझे उम्मीद है। क्या कोई देख सकता है कि मैं कहां गलत हो रहा हूं?

और भी अजीब बात यह है कि अगर मैं चयन के "आकार" को बदलता हूं ताकि डिफ़ॉल्ट रूप से एक से अधिक आइटम दिखाए जा सकें, क्रोम पर यह किसी भी विकल्प को कभी छुपाता नहीं है।

+0

क्या आप एक HTML उदाहरण भी पोस्ट कर सकते हैं? – Stefan

+0

'आकार()' पर साइड-नोट ने इसे शामिल किया है। इसे हटा दिया गया है। दस्तावेज़ों से: '.size() विधि कार्यात्मक रूप से। लम्बाई संपत्ति के बराबर है; हालांकि, लम्बाई संपत्ति को प्राथमिकता दी जाती है क्योंकि इसमें फ़ंक्शन कॉल का ओवरहेड नहीं होता है। '(http://api.jquery.com/size/) – Nope

+0

विकल्प किस प्रकार छिपाते हैं, या दिखाते हैं? –

उत्तर

3

यह मेरे लिए काम करता है, लेकिन आप मैन्युअल रूप से जोड़ सकते हैं और सीएसएस प्रदर्शन निकालना चाहें: तत्वों, बजाय दिखाएँ/छिपाएँ का उपयोग कर, संगतता कारणों के लिए के से कोई भी ...

alert($('#selContactLists option:not([style*=none])').length); 
+1

मैंने आपके जवाब को लगभग अनदेखा किया, यह बहुत आसान लग रहा था। मैं गलत था।अच्छा किया और धन्यवाद! – David

3

jQuery का :visible चयनकर्ता का उपयोग करें।

$('#selContactLists option:visible').length; 
+1

हाय जेम्स, यह हमेशा शून्य के साथ वापस आ जाता है। मैंने पहले स्थान पर उन्हें देखने के लिए .hide() का उपयोग किया था, लेकिन एक उदाहरण पर जहां सूची को 3 विकल्पों से 2 तक फ़िल्टर किया गया है, मुझे अभी भी 0 – David

+0

@ डेविड मिल गया है, अपना मार्कअप पोस्ट करें। इससे भी बेहतर, हमारे लिए एक उदाहरण [fiddle] (http://jsfiddle.net) फेंक दें। –

+0

http://jsfiddle.net/kcRUB/3/ – David

1

एक दृष्टिकोण काम करने के लिए लगता है कि, वह इस प्रकार है, हालांकि यह, धोखा देती है, कुछ हद तक,, विकल्प है कि छिपे हुए हैं, और पता चला बताए चर और फिर उन चर के .length संपत्ति का उपयोग करके:

$('#txtListSearch').keyup(
    function(e) { 
     var val = $(this).val().toLowerCase(), 
      sel = $('#selContactLists'); 
     if (val.length < 1) { 
      sel.find('option').show(); 
     } 
     else { 
      var shown = sel.find('option').filter(

       function() { 
        return $(this).text().toLowerCase().indexOf(val) !== -1; 
       }).show().first().prop('selected',true), 
       hidden = sel.find('option').filter(

       function() { 
        return $(this).text().toLowerCase().indexOf(val) == -1; 
       }).hide(); 
      console.log(shown.length, hidden.length); 
     } 
    });​ 

JS Fiddle demo

कृपया ध्यान दें कि उपरोक्त आपके मूल कोड का एक अपेक्षाकृत बड़ा पुनः लिखना है। मैंने keyup विधि से डीओएम तक पहुंचने की संख्या को कम करने के लिए चयनकर्ताओं के कुछ कैशिंग का उपयोग किया है, और वर्तमान में, .toLowerCase() विधियों के कारण यह एक केस-असंवेदनशील खोज है, और selectedIndex को पहले स्थानांतरित करता है टाइप करते समय select में दिखाया गया था, जबकि छिपाने के लिए one को अनुमति देने के लिए क्रोमियम में यह क्रोमियम में आवश्यक था।

+0

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

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