Compter le nombre de balises d'option dans une balise de sélection dans jQuery

159

Comment compter le nombre de <option>s dans un <select>élément DOM en utilisant jQuery?

<select data-attr="dropdown" id="input1">
  <option value="Male" id="Male">Male</option>
  <option value="Female" id="Female">Female</option>
</select>

Je veux trouver le nombre de <option>balises dans l' <select>élément DOM, car avec cela, je veux ouvrir le panneau des paramètres avec ce nombre de champs d'entrée avec la valeur d'option correspondante dans la liste déroulante et la modifier à nouveau dans l'aperçu panneau.

La liste déroulante ci-dessus se trouve dans mon panneau de prévisualisation qui est généré par jQuery.

Pitié
la source

Réponses:

263
$('#input1 option').length;

Cela produira 2.

rossignol2k1
la source
51

La solution W3C:

var len = document.getElementById("input1").length;
karim79
la source
5
Une variante de cette méthode avec javascript moderne sera var len = document.querySelector("#input1").length;
Jacob Nelson
22

Vous pouvez utiliser l'une ou l'autre propriété de longueur et les lengthperformances sont meilleures size.

$('#input1 option').length;

OU vous pouvez utiliser la fonction de taille comme

$('#input1 option').size(); 

Démo

Sadikhasan
la source
2
Cela ne fournit rien que les réponses de 2009 ne fournissent pas non plus.
TylerH
18

Votre question est un peu déroutante, mais en supposant que vous souhaitiez afficher le nombre d'options dans un panneau:

<div id="preview"></div>

et

$(function() {
  $("#preview").text($("#input1 option").length + " items");
});

Je ne suis pas sûr de comprendre le reste de votre question.

cletus
la source
14

Dans une boîte d'options à sélection multiple, vous pouvez utiliser $('#input1 :selected').length;pour obtenir le nombre d'options sélectionnées. Cela peut être utile pour désactiver les boutons si un certain nombre minimal d'options n'est pas satisfait.

function refreshButtons () {
    if ($('#input :selected').length == 0)
    {
        $('#submit').attr ('disabled', 'disabled');
    }
    else
    {
        $('#submit').removeAttr ('disabled');
    }
}
Philippe
la source
J'ai trouvé que cela fonctionnait après avoir retiré les accolades $('#input1 :selected').length; documentation de support api.jquery.com/length
Leonard Kakande
6

Ok, j'ai eu quelques problèmes parce que j'étais à l'intérieur d'un

$('.my-dropdown').live('click', function(){  
});

J'avais des multiples dans ma page, c'est pourquoi j'ai utilisé une classe.

Ma liste déroulante était remplie automatiquement par une requête ajax lorsque je cliquais dessus, donc je n'avais que l'élément $ (this)

alors...

Je devais faire:

$('.my-dropdown').live('click', function(){
  total_tems = $(this).find('option').length;
});
rêveur de travail
la source
6

La meilleure forme est celle-ci

$('#example option').length
Ricardo López García
la source
Cette solution de code uniquement (faible valeur) a été fournie 4 ans plus tôt par Sadikhasan. L'utilisation de a lengthété publiée par Karim79 9 ans plus tôt. Cette réponse peut être purgée en toute sécurité de la page car elle est complètement redondante.
mickmackusa
-1

Une autre approche qui peut être utile.

$('#select-id').find('option').length
zak
la source
1
La question ne demande pas le décompte des seuls <option> s sélectionnés .
user4642212