2009-12-09 13 views
11

मेरे पास एक सूची से उत्पन्न ड्रॉपडाउन चयनकर्ता है और डुप्लिकेट प्रविष्टियों को हटाने के लिए विकल्पों को फ़िल्टर करना चाहता हूं। जैसे मैं नीचे की तरह कुछ के साथ उपयोगकर्ता पेश करने के लिए फ़िल्टर करना चाहते हैं ...चुनिंदा ड्रॉपडाउन से डुप्लिकेट विकल्प फ़िल्टर करें

<select name="company"> 
    <option "1">Microsoft</option> 
    <option "2">Microsoft</option> 
    <option "3">Microsoft</option> 
    <option "4">Microsoft</option> 
    <option "5">Apple</option> 
    <option "6">Apple</option> 
    <option "7">Google</option> 
</select> 

... ...

<select name="company"> 
    <option "1">Microsoft</option> 
    <option "5">Apple</option> 
    <option "7">Google</option> 
</select> 

(डेटा एक और सूची पर एक शेयरप्वाइंट लुक से आता है और मैं कर रहा हूँ सोच रहा हूं कि मैं क्या कर रहा हूं इसके बारे में केवल अनूठे विकल्पों को रखने के लिए jquery का उपयोग कर सकता हूं।) क्या मैं इस तरह के विकल्पों को हटा सकता हूं? धन्यवाद।

उत्तर

31

आप एक सरल पाश के साथ यह कर सकते हैं - वहाँ jQuery चयनकर्ताओं कि मैं नहीं दिखाई दे रही है के साथ इस संभाल करने के लिए एक चालाक रास्ता है, हालांकि हो सकता है। निम्नलिखित काम करना चाहिए:

var usedNames = {}; 
$("select[name='company'] > option").each(function() { 
    if(usedNames[this.text]) { 
     $(this).remove(); 
    } else { 
     usedNames[this.text] = this.value; 
    } 
}); 

संपादित करें: यहाँ, एक कार्यात्मक शैली एक लाइनर कि यह उत्कृष्ट Underscore.js की मदद से करता है, हालांकि पिछले संस्करण लगभग निश्चित रूप से और अधिक कुशल है:

_.each(_.uniq(_.pluck($("select[name='company'] > option").get(), 'text')), function(name) { $("select[name='company'] > option:contains(" + name + ")").not(":first").remove(); }); 
+0

धन्यवाद। यह वही है जो मैं खोज रहा था, लेकिन मैं जेएस सिंटैक्स से जुड़ा हुआ था। – afewscoops

6

आप कुछ इस तरह कर सकते हैं:

var previousOption; 
$('select[name=company] option').each(function() { 
    if (this.text == previousOption) $(this).remove(); 
    previousOption= this.text; 
}); 
+0

सोचें कि आप इस मामले में टेक्स्ट() नहीं val() चाहते हैं। – Ryan

+2

तीन नोट्स: 1. मुझे लगता है कि आप वैल() के बजाय टेक्स्ट() का उपयोग करना चाहते हैं; चूंकि मान अलग दिखते हैं। 2. यह एक ऐसे मामले को नहीं पकड़ पाएगा जहां डुप्लिकेट मान वैकल्पिक (यानी माइक्रोसॉफ्ट, ऐप्पल, माइक्रोसॉफ्ट), हालांकि यह मूल प्रश्न से स्पष्ट नहीं है कि यह एक संभावना है। 3. मैं फ़ंक्शन की शुरुआत में केवल $ (यह) को कॉल करने की अनुशंसा करता हूं (यानी 'var option = $ (this); '), जैसा कि मेरा मानना ​​है कि यह एक मामूली महंगा ऑपरेशन है। –

+0

अच्छे विचारों के लिए धन्यवाद। वैल(), हालांकि, इस मामले में मेरे लिए सही मूल्य वापस कर दिया। मैं सहमत हूं कि टेक्स्ट बेहतर होगा। –

5

आप निम्न कोड आज़मा सकते हैं, यह उनकी स्थिति के बावजूद डुप्लिकेट को हटा देगा। यहां # लक्ष्य लक्ष्य चुनें आपका लक्ष्य ड्रॉपडाउन

var a = new Array(); 
$(#targetSelect).children("option").each(function(x){ 
test = false; 
b = a[x] = $(this).text(); 
for (i=0;i<a.length-1;i++){ 
if (b ==a[i]) test =true; 
} 
if (test) $(this).remove(); 
}); 
संबंधित मुद्दे