Domanda

Ho la seguente struttura di nodi HTML:

<div id="foo">
  <div id="bar"></div>
  <div id="baz">
    <div id="biz"></div>
  </div>
  <span></span>
</div>

Come contare il numero di figli immediati di foo , che sono di tipo div ? Nell'esempio sopra, il risultato dovrebbe essere due ( bar e baz ).

È stato utile?

Soluzione

$("#foo > div").length

Dirigi i figli dell'elemento con l'id 'pippo' che sono div. Quindi recuperare le dimensioni del set avvolto prodotto.

Altri suggerimenti

Consiglio di usare $ ('# foo'). children (). size () per prestazioni migliori.

Ho creato un jsperf per vedere la differenza di velocità e il children () ha battuto l'approccio selettore figlio (#foo > div) di almeno 60% in Chrome (canary build v15) 20-30% in Firefox (v4 ).

A proposito, inutile dirlo, questi due approcci producono gli stessi risultati (in questo caso, 1000).

[Aggiorna] Ho aggiornato il test per includere il test size () vs lunghezza e non fanno molta differenza (risultato: l'utilizzo length è leggermente più veloce (2%) rispetto a size () )

[Aggiorna] A causa del markup errato riscontrato nell'OP (prima dell'aggiornamento 'markup validated' da parte mia), entrambi $ (" #foo > div "). lunghezza & amp; $ ('# foo'). children (). length ha prodotto lo stesso risultato ( jsfiddle ). Ma per una risposta corretta per ottenere SOLO figli "div", un DOVREBBE usare il selettore figlio per & amp; migliori prestazioni

$("#foo > div") 

seleziona tutti i div che sono i discendenti immediati di #foo
una volta che hai il set di figli puoi usare la funzione size:

$("#foo > div").size()

oppure puoi usare

$("#foo > div").length

Entrambi ti restituiranno lo stesso risultato

$('#foo').children('div').length

In risposta alla risposta di mrCoder usando jsperf perché non usare semplicemente il nodo dom?

var $foo = $('#foo');
var count = $foo[0].childElementCount

Puoi provare il test qui: http://jsperf.com/jquery-child -ele-size / 7

Questo metodo ottiene 46.095 op / s mentre gli altri metodi nella migliore delle ipotesi 2000 op / s

$('#foo > div').size()
$("#foo > div").length

jQuery ha una funzione .size () che restituirà il numero di volte in cui appare un elemento ma, come specificato nella documentazione di jQuery, è più lento e restituisce lo stesso valore della proprietà .length, quindi è meglio semplicemente usa la proprietà .length. Da qui: http://www.electrictoolbox.com/get-total -Numero-elementi abbinati-jquery /

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>
var n_numTabs = $("#superpics div").size();

o

var n_numTabs = $("#superpics div").length;

Come già detto, entrambi restituiscono lo stesso risultato.
Ma la funzione size () è più jQuery "P.C".
Ho avuto un problema simile con la mia pagina.
Per ora, basta omettere > e dovrebbe funzionare bene.

Con la versione più recente di jquery, puoi utilizzare $ (" #superpics div "). children (). length .

$("div", "#superpics").size();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top