2009-11-26 53 views

Respuesta

478

Puede eliminar las opciones existentes utilizando el método empty, y luego añadir sus nuevas opciones:

var option = $('<option></option>').attr("value", "option value").text("Text"); 
$("#selectId").empty().append(option); 

Si tener sus nuevas opciones en un objeto puede:

var newOptions = {"Option 1": "value1", 
    "Option 2": "value2", 
    "Option 3": "value3" 
}; 

var $el = $("#selectId"); 
$el.empty(); // remove old options 
$.each(newOptions, function(key,value) { 
    $el.append($("<option></option>") 
    .attr("value", value).text(key)); 
}); 

Editar: Para la eliminación de los todas las opciones, pero la primera, puede utilizar el selector :gt, para obtener todos los option elementos con un índice mayor que cero y remove ellos:

$('#selectId option:gt(0)').remove(); // remove all options, but not the first 
+2

¿Cómo seguir siendo la primera opción cuando está vacío()? – Mask

+37

+1 para '$ ('# optionId option: gt (0)'). Remove();' –

+0

Si usa [bootstrap-select] (https://silviomoreto.github.io/bootstrap-select/) luego agregue lo siguiente para actualizar el selector de selección después de reemplazar las opciones: '$ ('# selectId'). selectpicker ('refresh'); $ ('# selectId'). selectpicker ('render'); '. De lo contrario, las nuevas opciones no serán visibles en su lista de selección. – phn

13
$('#comboBx').append($("<option></option>").attr("value",key).text(value)); 

donde comboBx es su ID de cuadro combinado.

o puede agregar opciones como cadenas al innerHTML ya existente y luego asignarlas a la selección innerHTML.

Edición

Si usted necesita para mantener la primera opción y eliminar todos los demás, puede utilizar

var firstOption = $("#cmb1 option:first-child"); 
$("#cmb1").empty().append(firstOption); 
+0

¿No eliminaste las opciones anteriores? – Mask

+0

¿Desea borrar los viejos o solo agrega nuevas opciones a las opciones existentes? – rahul

+0

sí, quiero borrar los viejos excepto el primero. – Mask

64

lancé una excelente respuesta de CMS en una rápida extensión de jQuery:

(function($, window) { 
    $.fn.replaceOptions = function(options) { 
    var self, $option; 

    this.empty(); 
    self = this; 

    $.each(options, function(index, option) { 
     $option = $("<option></option>") 
     .attr("value", option.value) 
     .text(option.text); 
     self.append($option); 
    }); 
    }; 
})(jQuery, window); 

Se espera una matriz de objetos que contienen claves de "texto" y "valor". Así que el uso es el siguiente:

var options = [ 
    {text: "one", value: 1}, 
    {text: "two", value: 2} 
]; 

$("#foo").replaceOptions(options); 
5

Por alguna extraña razón, esta parte

$el.empty(); // remove old options 

de la solución CMS que no funcionó para mí, así que en vez de que simplemente he utilizado este

el.html(' '); 

Y es un trabajo. Así que mi código de trabajo ahora se ve así:

var newOptions = { 
    "Option 1":"option-1", 
    "Option 2":"option-2" 
}; 

var $el = $('.selectClass'); 
$el.html(' '); 
$.each(newOptions, function(key, value) { 
    $el.append($("<option></option>") 
    .attr("value", value).text(key)); 
}); 
1

Si por ejemplo el código HTML contienen este código:

<select id="selectId"><option>Test1</option><option>Test2</option></select> 

Con el fin de cambiar la lista de opción dentro de su selección, se puede utilizar este código bramido. cuando su nombre seleccione nombrado , seleccione Id.

var option = $('<option></option>').attr("value", "option value").text("Text"); 
$("#selectId").html(option); 

en este ejemplo anterior cambio la antigua lista de opción por sólo una nueva opción.

+1

¿Por qué el OP debería intentar esto? Agregue una explicación de lo que hizo y por qué lo hizo de esa manera no solo para el OP, sino para los futuros visitantes de SO. –

2

Eliminar y agregar el elemento DOM es más lento que la modificación del existente.

Si los conjuntos de opciones tienen la misma longitud, es posible hacer algo como esto:

$('#my-select option') 
.each(function(index) { 
    $(this).text('someNewText').val('someNewValue'); 
}); 

En caso de que su nuevo conjunto de opciones tiene una longitud diferente, es posible eliminar/añadir opciones vacías que realmente necesita, utilizando alguna técnica descrito arriba.

1

Si actualizamos <select> constantemente y tenemos que guardar el valor anterior:

var newOptions = { 
    'Option 1':'value-1', 
    'Option 2':'value-2' 
}; 

var $el = $('#select'); 
var prevValue = $el.val(); 
$el.empty(); 
$.each(newOptions, function(key, value) { 
    $el.append($('<option></option>').attr('value', value).text(key)); 
    if (value === prevValue){ 
     $el.val(value); 
    } 
}); 
$el.trigger('change'); 
0

¿Esto ayuda?

$("#SelectName option[value='theValueOfOption']")[0].selected = true; 
+1

Esta pregunta se trata de agregar dinámicamente