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.

Réponses:



51

La solution W3C:

var len = document.getElementById("input1").length;

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


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.


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

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

6

La meilleure forme est celle-ci

$('#example option').length

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

1
La question ne demande pas le décompte des seuls <option> s sélectionnés .
user4642212
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.