264 votes

Comment changer les options de <select> avec jQuery?

Supposons qu'une liste d'options est disponible, comment mettez-vous à jour le <select> avec le nouveau <option> s?

580voto

CMS Points 315406

Vous pouvez supprimer les options existantes à l'aide de la empty méthode, puis ajoutez vos nouvelles options:

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

Si vous avez de nouvelles options dans un objet, vous pouvez:

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));
});

Edit: Pour la suppression de toutes les options, mais le premier, vous pouvez utiliser l' :gt sélecteur, pour obtenir tous les option des éléments avec un indice supérieur à zéro et remove :

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

76voto

ktusznio Points 1524

J'ai jeté l'excellente réponse de CMS dans une extension jQuery rapide:

 (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);
 

Il attend un tableau d'objets contenant les clés "texte" et "valeur". Donc, l'utilisation est la suivante:

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

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

14voto

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

où comboBx est votre identifiant de zone de liste déroulante.

ou vous pouvez ajouter des options en tant que chaîne au innerHTML déjà existant, puis l'affecter à selectHTML.

modifier

Si vous devez conserver la première option et supprimer toutes les autres, vous pouvez utiliser

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

5voto

user2842538 Points 3

Pour une raison étrange cette partie

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

de la solution CMS n'a pas fonctionné pour moi, donc au lieu de cela, j'ai simplement utilisé cette

 el.html(' ');
 

Et ça marche. Donc mon code de travail ressemble à ça:

 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));
});
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X