Puede hacerlo de esta manera:
var found = [];
$("select option").each(function() {
if($.inArray(this.value, found) != -1) $(this).remove();
found.push(this.value);
});
Give it a try here, es un enfoque simple, estamos solo estamos manteniendo una matriz de valores encontrados, si no hemos encontrado el valor, agrégalo a la matriz (.push()
), si tiene encontrado el valor, este es un engaño que encontramos anteriormente, .remove()
.
Esto solo rastrea el <select>
una vez, minimizando el recorrido DOM que es un lote más costoso que las operaciones de la matriz. También estamos usando $.inArray()
en lugar de .indexOf()
para que esto funcione correctamente en IE.
Si desea una solución menos eficiente pero más corta (sólo para ilustración, utilice el primer método!):
$('select option').each(function() {
$(this).prevAll('option[value="' + this.value + '"]').remove();
});
You can test it here, esto elimina todos los hermanos con el mismo valor, pero es mucho más es caro que el primer método (DOM Traversal es costoso, y el motor de selector múltiple llama aquí, muchos más). Estamos usando .prevAll()
porque no puede simplemente eliminar .siblings()
dentro de un .each()
, causará algunos errores con el ciclo ya que esperaba el próximo hijo.
Comentario para ayudar a los novatos como yo. Si usa jQuery noconflict, asegúrese de reemplazar todos los $ con lo que elija. Le ahorrará mucho tiempo depurando. :) - http://api.jquery.com/jquery.noconflict/ –
@JoshuaDance también puedes envolver todo esto en una función donde '$' está jQuery dentro para simplificar cosas, como esta: '(función ($) {... code ...}) (jQuery); '(o algo más si no es' jQuery'). Esto significa que lo que elija va 1 lugar, en lugar de tener que modificar cada bit de código o complemento que desea utilizar. –
Este método detendrá los duplicados en ** ALL ** selecciona en la página. Por ejemplo, si tiene múltiples selecciones de sí/no, solo la primera tendrá opciones. Duplique la selección en su violín y pruebe. Por lo tanto, ninguna opción aparecerá en la página más de una vez. hth –