Comment enlever toutes les options d'une zone de sélection, puis ajouter une option et sélectionner avec jQuery?

en utilisant core jQuery, comment supprimer toutes les options d'une boîte de sélection, puis Ajouter une option et la sélectionner?

ma boîte de sélection est la suivante.

<Select id="mySelect" size="9" </Select>

EDIT: le code suivant a été utile pour le chaînage. Cependant, (dans Internet Explorer) .val('whatever') n'a pas sélectionné l'option qui a été ajoutée. (J'ai utilisé la même " valeur "dans .append et .val .)

$('#mySelect').find('option').remove().end().append('<option value="whatever">text</option>').val('whatever');

EDIT: en Essayant de le rendre pour imiter ce code, j'utilise le code suivant chaque fois que la page/forme est réinitialisée. Cette zone est remplie par un ensemble de boutons radio. .focus() est plus proche, mais l'option ne semble pas sélectionnée comme elle le fait avec .selected= "true" . Rien ne cloche avec mon code existant - j'essaie juste d'apprendre le jQuery.

var mySelect = document.getElementById('mySelect');
mySelect.options.length = 0;
mySelect.options[0] = new Option ("Foo (only choice)", "Foo");
mySelect.options[0].selected="true";

modifier: réponse sélectionnée était proche de ce dont j'avais besoin. Cela a fonctionné pour moi:

$('#mySelect').children().remove().end().append('<option selected value="whatever">text</option>') ;

mais les deux réponses m'ont conduit à ma finale solution..

901
demandé sur Martin Smith 2008-09-07 00:53:54

21 réponses

$('#mySelect')
    .find('option')
    .remove()
    .end()
    .append('<option value="whatever">text</option>')
    .val('whatever')
;
1507
répondu Matt 2008-10-17 02:25:14
$('#mySelect')
    .empty()
    .append('<option selected="selected" value="whatever">text</option>')
;
624
répondu Mahzilla 2012-04-08 14:24:08

pourquoi ne pas utiliser simplement javascript?

document.getElementById("selectID").options.length = 0;
109
répondu Shawn 2014-02-14 08:50:05

j'ai eu un bug dans IE7 (fonctionne très bien dans IE6) où l'utilisation des méthodes jQuery ci-dessus permettrait d'effacer le sélectionner dans le DOM mais pas à l'écran. En utilisant la barre D'outils du développeur IE, je pouvais confirmer que le select avait été effacé et avait les nouveaux éléments, mais visuellement le select montrait toujours les anciens éléments - même si vous ne pouviez pas les sélectionner.

la solution était d'utiliser des méthodes DOM standard/properites (comme l'affiche originale avait) à effacer plutôt que jQuery - toujours en utilisant jQuery pour ajouter des options.

$('#mySelect')[0].options.length = 0;
72
répondu row1 2010-01-11 09:22:09

si votre but est de supprimer toutes les options de select sauf la première (typiquement l'option' s'il vous plaît choisir un article'), vous pouvez utiliser:

$('#mySelect').find('option:not(:first)').remove();
68
répondu mauretto 2013-03-27 09:56:28
$('#mySelect')
    .empty()
    .append('<option value="whatever">text</option>')
    .find('option:first')
    .attr("selected","selected")
;
24
répondu Hayden Chambers 2009-06-03 20:48:14

ne sait pas exactement ce que vous voulez dire par" ajouter un et le sélectionner", car il sera sélectionné par défaut de toute façon. Mais, si vous ajoutez plus d'un, il aurait plus de sens. Que diriez-vous de quelque chose comme:

$('select').children().remove();
$('select').append('<option id="foo">foo</option>');
$('#foo').focus();

réponse à "EDIT" : pouvez-vous clarifier ce que vous voulez dire par "cette zone de sélection est peuplée par un ensemble de boutons radio"? Un élément