J'ai la structure de nœud HTML suivante:
<div id="foo">
<div id="bar"></div>
<div id="baz">
<div id="biz"></div>
</div>
<span></span>
</div>
Comment compter le nombre d'enfants immédiats de foo
, qui sont de type div
? Dans l'exemple ci-dessus, le résultat doit être deux ( bar
et baz
).
Réponses:
$("#foo > div").length
Direct les enfants de l'élément avec l'id 'foo' qui sont des divs Récupérer ensuite la taille de l'ensemble enveloppé produit.
la source
$('#table > th').size()
.Je recommande d'utiliser
$('#foo').children().size()
pour de meilleures performances.J'ai créé un test jsperf pour voir la différence de vitesse et la
children()
méthode a battu l'approche du sélecteur enfant (#foo> div) d'au moins 60% dans Chrome (version canary v15) 20-30% dans Firefox (v4).En passant, il va sans dire que ces deux approches produisent les mêmes résultats (dans ce cas, 1000).
[Mise à jour] J'ai mis à jour le test pour inclure le test size () vs length, et cela ne fait pas beaucoup de différence (résultat: l'
length
utilisation est légèrement plus rapide (2%) quesize()
)[Mise à jour] En raison du balisage incorrect vu dans l'OP (avant « balisage Validé » mise à jour par moi), à la fois
$("#foo > div").length
et$('#foo').children().length
donné le même ( jsFiddle ). Mais pour que la réponse correcte n'obtienne QUE des enfants `` div '', on DEVRAIT utiliser le sélecteur d'enfants pour des performances correctes et meilleuresla source
.length
est en fait la méthode préférée car elle n'a pas la surcharge d'un appel de fonction.$('#extraLinks').children().size()
compter les zones de texte dans un div (nommé extraLinks) pourquoi j'obtiens4
quand elles ne sont que 2. En général, j'obtiens la longueur multipliée par 2 ... Une idée pourquoi? Merci$("#foo > div")
sélectionne tous les div qui sont des descendants immédiats de #foo
une fois que vous avez l'ensemble des enfants, vous pouvez soit utiliser la fonction de taille:
$("#foo > div").size()
ou vous pouvez utiliser
$("#foo > div").length
Les deux vous renverront le même résultat
la source
$('#foo').children('div').length
la source
En réponse à la réponse de mrCoders en utilisant jsperf, pourquoi ne pas simplement utiliser le nœud dom?
var $foo = $('#foo'); var count = $foo[0].childElementCount
Vous pouvez essayer le test ici: http://jsperf.com/jquery-child-ele-size/7
Cette méthode obtient 46095 op / s tandis que les autres méthodes au mieux 2000 op / s
la source
$('#foo > div').size()
la source
$("#foo > div").length
jQuery a une fonction .size () qui retournera le nombre de fois où un élément apparaît mais, comme spécifié dans la documentation jQuery, il est plus lent et renvoie la même valeur que la propriété .length, il est donc préférable d'utiliser simplement le. propriété de longueur. De là: http://www.electrictoolbox.com/get-total-number-matched-elements-jquery/
la source
var divss = 0; $(function(){ $("#foo div").each(function(){ divss++; }); console.log(divss); }); <div id="foo"> <div id="bar" class="1"></div> <div id="baz" class="1"></div> <div id="bam" class="1"></div> </div>
la source
Avec la version la plus récente de jquery, vous pouvez utiliser
$("#superpics div").children().length
.la source
var n_numTabs = $("#superpics div").size();
ou
var n_numTabs = $("#superpics div").length;
Comme cela a déjà été dit, les deux renvoient le même résultat.
Mais la fonction size () est plus jQuery "PC".
J'ai eu un problème similaire avec ma page.
Pour l'instant, omettez simplement le> et cela devrait fonctionner correctement.
la source
$("div", "#superpics").size();
la source
div
descendants, pas seulement les enfants.Essayez ceci pour les éléments enfants immédiats de type div
$("#foo > div")[0].children.length
la source