465 votes

Comment obtenir toutes les options d'une sélection à l'aide de Jquery ?

Comment puis-je obtenir toutes les options d'une sélection via Jquery en passant sur son ID ?

Edit : Je cherche seulement à obtenir leurs valeurs, pas le texte.

681voto

ybo Points 8870

Deuxième fois que j'écris une réponse comme ça aujourd'hui...

$("#id option").each(function()
{
    // add $(this).val() to your list
});

65 votes

Aucune des opérations JavaScript ne nécessite jQuery. jQuery est une question de choix pour simplifier les opérations JS.

10 votes

Vous pouvez également faire : $("#id option").each(function(name, val) { var opt=val.text ; }) ;

3 votes

$.map est beaucoup plus élégante et moins sujette aux erreurs (voir ci-dessous).

191voto

KooiInc Points 38845

Je ne connais pas jquery, mais je sais que si vous récupérez l'élément select, il contient un objet 'options'.

var myOpts = document.getElementById('yourselect').options;
alert(myOpts[0].value) //=> value of the first option

79 votes

+1. N'ayez pas recours à la magie complexe des sélecteurs de jQuery pour des choses qui ont déjà des implémentations assez efficaces intégrées dans le bon vieux DOM.

22 votes

Pourquoi pas, @bobince ? Si vous utilisez principalement jQuery, c'est plus rapide à la fois parce qu'il y a moins de code à écrire et parce qu'il est plus rapide de ne pas essayer de savoir si vous devez passer au javascript normal dans ce cas. Et votre code est plus cohérent.

0 votes

Je suis d'accord avec @Andrew. jQuery est hautement optimisé et utilise les fonctions natives plus rapides lorsque c'est possible. J'aime aussi la simplicité des sélecteurs jquery.

162voto

PCasagrande Points 2139

$.map est probablement le moyen le plus efficace de le faire.

var options = $('#selectBox option');

var values = $.map(options ,function(option) {
    return option.value;
});

Vous pouvez ajouter des options de modification à $('#selectBox option:selected') si vous ne voulez que ceux qui sont sélectionnés.

La première ligne sélectionne toutes les cases à cocher et place leur élément jQuery dans une variable. Nous utilisons ensuite l'élément .map de jQuery pour appliquer une fonction à chacun des éléments de cette variable ; nous ne faisons que renvoyer la valeur de chaque élément, car c'est tout ce qui nous intéresse. Comme nous les renvoyons à l'intérieur de la fonction map, celle-ci construit en fait un tableau des valeurs, comme demandé.

4 votes

C'est la solution la plus élégante, selon moi. La carte est une construction très puissante qui convient exactement à cette situation.

1 votes

J'aime beaucoup votre solution - c'est l'approche que j'ai adoptée. Cependant, si vous ne voulez que les valeurs sélectionnées, c'est encore plus trivial : $('#selectBox').val() retournera un tableau des valeurs sélectionnées.

0 votes

Bonjour, @PCasagrande J'ai un attribut personnalisé nommé 'data-type'. Comment puis-je obtenir la valeur de cet attribut en utilisant votre solution ? Ce que je fais est 'option.data-type', mais cela me donne NaN. Merci d'avance.

81voto

cic Points 2225

Quelques réponses utilisent each , map est une meilleure alternative ici, à mon avis :

$("select#example").children().map(function() {return $(this).val();}).get();

Il y a (au moins) deux map dans jQuery, la réponse de Thomas Petersen utilise "Utilities/jQuery.map" ; cette réponse utilise "Traversing/map" (et donc un code un peu plus propre).

Edit, correction : Cela dépend de ce que vous allez faire avec les valeurs. Si vous voulez, disons, retourner les valeurs d'une fonction, map est probablement la meilleure solution. Mais si vous voulez utiliser les valeurs directement, vous voudrez probablement each .

4 votes

Vous pouvez en fait utiliser this.value au lieu de $(this).val() ici. Vous seriez également mieux servi en trouvant les enfants dans le sélecteur initial (option #exemple). Joli coup avec le get() à la fin.

1 votes

@Alex Barret : Eh bien, il est possible de résoudre ce problème sans utiliser jQuery du tout. L'appel à jQuery avec un élément comme argument va juste envelopper l'élément dans un objet jQuery (c'est-à-dire pas de traversée d'arbre, c'est-à-dire pas si cher). Donc peut-être qu'en tant que micro-optimisation, oui.

0 votes

Carte FTW. C'est exactement comme ça que ça devrait être fait. Le get() à la fin semble inutile, cependant (cela retourne le noeud DOM, et val() nous donne déjà une chaîne, donc... ?) var opts = $('#cm_amt option').map( function() { return parseInt($(this).val()) ; } ) ;

62voto

Raibaz Points 1860
   $('select#id').find('option').each(function() {
            alert($(this).val());
        });

2 votes

C'est la solution, car j'aime mettre les éléments en cache dans des variables à l'initialisation, plutôt que d'utiliser le sélecteur.

1 votes

Fonctionne également avec $(this) (ce qui est ce que je cherchais), par ex,

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