Si può fare in questo modo:
var found = [];
$("select option").each(function() {
if($.inArray(this.value, found) != -1) $(this).remove();
found.push(this.value);
});
Give it a try here, è un approccio semplice, noi' semplicemente mantenendo un array di valori trovati, se non abbiamo trovato il valore, aggiungilo all'array (.push()
), se abbiamo abbiamo trovato il valore, questo è un dupe che abbiamo trovato prima, .remove()
esso.
Questo esegue solo la scansione del numero <select>
una volta, riducendo al minimo l'attraversamento del DOM, che è un lotto più costoso rispetto alle operazioni dell'array. Inoltre stiamo usando $.inArray()
invece di .indexOf()
quindi funziona correttamente in IE.
Se si desidera una soluzione meno efficiente ma più breve (solo per l'illustrazione, utilizzare il primo metodo!):
$('select option').each(function() {
$(this).prevAll('option[value="' + this.value + '"]').remove();
});
You can test it here, questo rimuove tutti i fratelli con lo stesso valore, ma è molto di più costoso rispetto al primo metodo (DOM Traversal è costoso, e più motore di selezione chiama qui, molti altri). Stiamo utilizzando .prevAll()
perché non puoi semplicemente rimuovere .siblings()
all'interno di uno .each()
, causerà alcuni errori con il ciclo poiché si aspettava il prossimo figlio.
fonte
2010-07-12 10:54:34
Commento per aiutare i principianti come me. Se usi un jQuery noconflict assicurati di sostituire tutti $ con qualsiasi cosa tu abbia scelto. Ti farà risparmiare un sacco di tempo per il debug. :) - http://api.jquery.com/jquery.noconflict/ –
@JoshuaDance puoi anche racchiudere tutto ciò in una funzione dove '$' è jQuery all'interno per semplificare le cose, come questo: '(function ($) {... code ...}) (jQuery); '(o qualcos'altro se non è' jQuery'). Ciò significa che qualsiasi cosa tu scelga va 1 posto, piuttosto che dover modificare ogni bit di codice o plugin che vuoi usare. –
Questo metodo bloccherà i duplicati in ** TUTTI ** selezionati nella pagina. Ad esempio Se hai selezionato più sì/no, solo il primo avrà opzioni. Duplica la selezione nel tuo violino e prova. Quindi nessuna opzione apparirà sulla pagina più di una volta. hth –