2010-07-12 20 views
6

Wie würde ich, jQuery verwenden, die dups entfernenLöschen von doppelten Einträgen aus einer Auswahlbox

 <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> 

Antwort

11

Sie können es wie folgt tun:

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

Give it a try here, es ist ein einfacher Ansatz, wir re nur eine Reihe von gefundenen Werten zu halten, wenn wir den Wert nicht gefunden haben, fügen sie es den Array (.push()), wenn wir den Wert gefunden haben, ist dies ein Betrogene wir früher gefunden, .remove() es.

Dies crawlt nur einmal die <select>, minimiert DOM Traversal, die eine Los teurer als Array-Operationen ist. Auch verwenden wir $.inArray() statt .indexOf() so das funktioniert richtig im Internet Explorer.


Wenn Sie eine weniger effizient, aber kürzere Lösung wollen (nur zur Veranschaulichung, verwenden Sie die erste Methode!):

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

You can test it here, das alle Geschwister mit dem gleichen Wert entfernt, aber es ist viel mehr teurer als die erste Methode (DOM Traversal ist teuer, und mehrere Selector-Engine-Aufrufe hier, viele mehr). Wir verwenden .prevAll(), weil Sie nicht nur .siblings() innerhalb eines .each() entfernen, wird es einige Fehler mit der Schleife verursachen, da es das nächste Kind erwartet.

+0

Kommentar der Rookies wie ich zu helfen. Wenn Sie ein jQuery-Noconflict verwenden, stellen Sie sicher, dass Sie alle $ mit dem, was Sie gewählt haben, ersetzen. Spart Ihnen viel Zeit beim Debuggen. :) - http://api.jquery.com/jquery.noconflict/ –

+1

@JoshuaDance Sie können auch alles in eine Funktion einfügen, in der '$' jQuery ist, um die Dinge zu vereinfachen, etwa so: '(function ($) {... code ...}) (jQuery); '(oder etwas anderes, wenn es nicht' jQuery' ist). Dies bedeutet, dass alles, was Sie gewählt haben, einen Platz belegt, anstatt jedes Bit des Codes oder Plugins, das Sie verwenden möchten, zu ändern. –

+0

Mit dieser Methode werden Duplikate in ** ALL ** -Auswahlen auf der Seite gestoppt. Zum Beispiel Wenn Sie mehrere Ja/Nein-Optionen hatten, nur die erste hat Optionen. Dupliziere die Auswahl in deiner Geige und teste sie. Daher wird keine Option mehr als einmal auf der Seite angezeigt. hth –

2

Der einfachste Weg, die mir in den Sinn kam, wurde mit Geschwistern

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

var $option = $(this); 

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


}) 
1

Von oben aus meinem Kopf, nicht getestet:

$('#mySelect option').each(function(){ 
    if ($('#mySelect option[value="'+$(this).val()+'"]').length) $(this).remove(); 
}); 
+0

Es ist ein guter Weg, aber in Ihrer Frage hinzufügen "... Länge> 1" –

0

try Code unten doppelte Optionen zu entfernen:

$("#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>

Verwandte Themen