2010-07-12 13 views
6

मैं कैसे, jQuery का उपयोग कर जाएगा से डुप्लिकेट प्रविष्टियों को हटा दें, dupsएक सलेक्ट बॉक्स

 <option value="English">English</option> 
     <option value="English">English</option> 
     <option value="English">English</option> 
     <option value="Geology">Geology</option> 
     <option value="Geology">Geology</option> 
     <option value="Information Technology">Information Technology</option> 
     <option value="Music">Music</option> 
     <option value="Music">Music</option> 
     <option value="Zoology">Zoology</option> 

उत्तर

11

को दूर तुम इस तरह यह कर सकते हैं:

var found = []; 
$("select option").each(function() { 
    if($.inArray(this.value, found) != -1) $(this).remove(); 
    found.push(this.value); 
}); 

Give it a try here, यह एक सरल तरीका है, हम यदि हमें मूल्य नहीं मिला है, तो उसे केवल मान प्राप्त नहीं किया गया है, अगर इसे में मान मिला है, तो यह एक डुप्ली है जिसे हमने पहले पाया था, .remove()

यह केवल <select> क्रॉल करता है एक बार, डोम ट्रेवर्सल जो एक बहुत अधिक सरणी संचालन से महंगा है कम से कम। इसके अलावा हम के बजाय $.inArray() का उपयोग कर रहे हैं, इसलिए यह IE में ठीक से काम करता है।


आप एक कम कुशल लेकिन छोटे समाधान चाहते हैं (सिर्फ उदाहरण के लिए, पहली विधि का उपयोग!):

$('select option').each(function() { 
    $(this).prevAll('option[value="' + this.value + '"]').remove(); 
}); 

You can test it here, इस समान मूल्य वाली सभी भाई बहन निकालता है, लेकिन यह बहुत ज्यादा है पहली विधि से महंगा (डीओएम ट्रैवर्सल महंगा है, और कई चयनकर्ता इंजन यहां कॉल करते हैं, और भी बहुत कुछ)। हम .prevAll() का उपयोग कर रहे हैं क्योंकि आप .siblings() को .each() के अंदर नहीं हटा सकते हैं, इससे लूप के साथ कुछ त्रुटियां हो जाएंगी क्योंकि यह अगले बच्चे की अपेक्षा की जाती है।

+0

मेरे जैसे रूकीज़ की मदद करने के लिए टिप्पणी करें। यदि आप एक jQuery नॉकनफ्लिक्ट का उपयोग करते हैं तो सुनिश्चित करें कि आपने जो कुछ भी चुना है उसके साथ आप सभी $ को प्रतिस्थापित करें। आपको बहुत समय डिबगिंग बचाएगा। :) - http://api.jquery.com/jquery.noconflict/ –

+1

@ जोशुआ डांस आप इसे एक ऐसे फ़ंक्शन में भी लपेट सकते हैं जहां चीजों को सरल बनाने के लिए '$' jQuery है, जैसे: '(function ($) {... कोड ...}) (jQuery); '(या कुछ और अगर यह 'jQuery' नहीं है)। इसका मतलब यह है कि जो कुछ भी आपने चुना है वह कोड या प्लगइन के हर बिट को संशोधित करने के बजाय 1 स्थान पर जाता है। –

+0

यह विधि पृष्ठ पर सभी ** ** ** में डुप्लीकेट को रोक देगा। उदाहरण के लिए यदि आपके पास एकाधिक हां/नहीं हैं तो केवल पहले विकल्प में विकल्प होंगे। अपने पहेली और परीक्षण में चयन डुप्लिकेट करें। इसलिए पेज पर एक से अधिक विकल्प नहीं दिखाई देंगे। एचएच –

2

सबसे आसान तरीका है कि मेरे दिमाग में आया भाई बहन

$("select>option").each(function(){ 

var $option = $(this); 

$option.siblings() 
     .filter(function(){ return $(this).val() == $option.val() }) 
     .remove() 


}) 
1

मेरे सिर के ऊपर से, अपरीक्षित उपयोग कर रहा था:

कोड नीचे
$('#mySelect option').each(function(){ 
    if ($('#mySelect option[value="'+$(this).val()+'"]').length) $(this).remove(); 
}); 
+0

यह एक अच्छा तरीका है लेकिन आपके प्रश्न में "... लंबाई> 1" जोड़ें –

0

कोशिश उपयोग डुप्लिकेट विकल्पों को दूर करने के:

$("#color option").val(function(idx, val) { 
 
    $(this).siblings("[value='"+ val +"']").remove(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<select class ="select-form" name="color" id="color"> 
 
    <option value="">Select Color</option> 
 
    <option value="1">Color 1</option> 
 
    <option value="2">Color 2</option> 
 
    <option value="3">Color 3</option> 
 
    <option value="3">Color 3</option> <!-- will be removed since value is duplicate --> 
 
    <option value="2">Color 2</option> <!-- will be removed since value is duplicate --> 
 
</select>

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