Eu tenho a seguinte estrutura de nó HTML:
<div id="foo">
<div id="bar"></div>
<div id="baz">
<div id="biz"></div>
</div>
<span></span>
</div>
Como posso contar o número de filhos imediatos de foo
que são do tipo div
? No exemplo acima, o resultado deve ser dois ( bar
e baz
).
javascript
jquery
dom
jquery-selectors
Dónal
fonte
fonte
Respostas:
Direcione os filhos do elemento com o id 'foo' que são divs. Em seguida, recupere o tamanho do conjunto embrulhado produzido.
fonte
$('#table > th').size()
.Eu recomendo usar
$('#foo').children().size()
para um melhor desempenho.Criei um teste jsperf para ver a diferença de velocidade e o
children()
método superou a abordagem do seletor filho (#foo> div) em pelo menos 60% no Chrome (canary build v15) 20-30% no Firefox (v4).A propósito, escusado será dizer que essas duas abordagens produzem os mesmos resultados (neste caso, 1000).
[Atualização] Atualizei o teste para incluir o tamanho () versus o comprimento, e eles não fazem muita diferença (resultado: o
length
uso é um pouco mais rápido (2%) do quesize()
)[Update] Devido à marcação incorreta visto no OP (antes de 'marcação validado' update por mim), ambos
$("#foo > div").length
&$('#foo').children().length
resultou o mesmo ( jsFiddle ). Mas, para uma resposta correta, para obter APENAS filhos 'div', deve-se usar o seletor de filhos para obter o desempenho correto e melhorfonte
.length
é de fato o método preferido porque não possui a sobrecarga de uma chamada de função.$('#extraLinks').children().size()
de contar caixas de texto em uma div (denominada extraLinks), por que recebo4
quando são apenas 2. Em geral, obtenho o comprimento multiplicado por 2 ... Alguma idéia do porquê? Graçasseleciona todas as divs que são descendentes imediatos de #foo
depois de ter o conjunto de filhos, você pode usar a função size:
ou você pode usar
Ambos retornarão o mesmo resultado
fonte
fonte
Em resposta à mrCoders, responda usando jsperf, por que não usar apenas o nó dom?
Você pode tentar o teste aqui: http://jsperf.com/jquery-child-ele-size/7
Esse método obtém 46.095 op / s, enquanto os outros métodos, no máximo, 2000 op / s
fonte
fonte
O jQuery possui uma função .size () que retornará o número de vezes que um elemento aparece, mas, conforme especificado na documentação do jQuery, é mais lento e retorna o mesmo valor que a propriedade .length, portanto é melhor simplesmente usar o. propriedade length. A partir daqui: http://www.electrictoolbox.com/get-total-number-matched-elements-jquery/
fonte
fonte
Com a versão mais recente do jquery, você pode usar
$("#superpics div").children().length
.fonte
ou
Como já foi dito, ambos retornam o mesmo resultado.
Mas a função size () é mais jQuery "PC".
Eu tive um problema semelhante com a minha página.
Por enquanto, apenas omita o> e deve funcionar bem.
fonte
fonte
div
descendentes, não apenas os filhos.Tente isso para elementos filho imediatos do tipo div
fonte