Vous pouvez le faire comme ceci:
var found = [];
$("select option").each(function() {
if($.inArray(this.value, found) != -1) $(this).remove();
found.push(this.value);
});
Give it a try here, il est une approche simple, nous » Si vous n'avez pas trouvé la valeur, ajoutez-la au tableau (.push()
), si nous avons trouvé la valeur, celui-ci est une dupe que nous avons trouvée plus tôt, .remove()
.
Ceci ne fait que parcourir le <select>
une seule fois, en minimisant la traversée de DOM qui est un lot plus coûteuse que les opérations en réseau. En outre, nous utilisons $.inArray()
au lieu de .indexOf()
donc cela fonctionne correctement dans IE.
Si vous voulez un moins efficace mais plus courte solution (juste pour illustration, utiliser la première méthode!):
$('select option').each(function() {
$(this).prevAll('option[value="' + this.value + '"]').remove();
});
You can test it here, cela supprime tous les frères et sœurs avec la même valeur, mais il est beaucoup plus cher que la première méthode (DOM Traversal est cher, et plusieurs appels de moteur de sélection ici, beaucoup plus). Nous utilisons .prevAll()
parce que vous ne pouvez pas simplement supprimer .siblings()
à l'intérieur d'un .each()
, cela causera quelques erreurs avec la boucle car elle attendait le prochain enfant.
Commenter pour aider les débutants comme moi. Si vous utilisez un noconflict jQuery, assurez-vous de remplacer tous les $ avec ce que vous avez choisi. Cela vous évitera beaucoup de débogage. :) - http://api.jquery.com/jquery.noconflict/ –
@JoshuaDance vous pouvez aussi envelopper tout cela dans une fonction où '$' est jQuery inside pour simplifier les choses, comme ceci: '(function ($) {... code ...}) (jQuery); '(ou autre chose si ce n'est pas' jQuery'). Cela signifie que tout ce que vous avez choisi va 1 place, plutôt que d'avoir à modifier chaque bit de code ou plugin que vous voulez utiliser. –
Cette méthode arrêtera les doublons dans les sélections ** ALL ** sur la page. Par exemple Si vous avez plusieurs sélections oui/non seulement le premier aura des options. Dupliquer le select dans votre violon et tester. Donc, aucune option n'apparaîtra sur la page plus d'une fois. hth –