使用jQuery计算立即子div元素

Dón*_*nal 173 javascript jquery dom jquery-selectors

我有以下HTML节点结构:

<div id="foo">
  <div id="bar"></div>
  <div id="baz">
    <div id="biz"></div>
  </div>
  <span></span>
</div>
Run Code Online (Sandbox Code Playgroud)

我如何计算foo类型的直系子女的数量div?在上面的例子中,结果应该是两个(barbaz).

Gar*_*ler 334

$("#foo > div").length
Run Code Online (Sandbox Code Playgroud)

带有id为"foo"的元素的直接子元素是div.然后检索生成的包装集的大小.


man*_*nta 68

我建议使用$('#foo').children().size()以获得更好的性能.

我创建了一个jsperf测试,看速度差和children()至少打孩子选择器(#foo> DIV)的方式方法,60%的铬(金丝雀构建V15)20-30%的Firefox(V4).

顺便说一句,不用说,这两种方法产生相同的结果(在这种情况下,1000).

[更新]我已经更新了测试以包括size()和长度测试,并且它们没有太大区别(结果:length使用率略高于(2%)size())

[更新]由于在OP看到不正确的标记(前"标记验证"由我更新),都$("#foo > div").length$('#foo').children().length结果相同(的jsfiddle).但是为了获得正确的答案来获得'div'的孩子,一个人应该使用子选择器来获得正确和更好的表现

  • `.length`实际上是首选方法,因为它没有函数调用的开销. (2认同)

Dar*_*o Z 25

$("#foo > div") 
Run Code Online (Sandbox Code Playgroud)

选择所有作为#foo的直系后代的div,
一旦你拥有了一组子项,就可以使用size函数:

$("#foo > div").size()
Run Code Online (Sandbox Code Playgroud)

或者你可以使用

$("#foo > div").length
Run Code Online (Sandbox Code Playgroud)

两者都会返回相同的结果


Abd*_*UMI 14

$('#foo').children('div').length
Run Code Online (Sandbox Code Playgroud)


Hax*_*lit 8

为了响应mrCoders使用jsperf回答为什么不只是使用dom节点?

var $foo = $('#foo');
var count = $foo[0].childElementCount
Run Code Online (Sandbox Code Playgroud)

您可以在这里尝试测试:http://jsperf.com/jquery-child-ele-size/7

此方法获得46,095 op/s,而其他方法最高2000 op/s

  • OP只要求div子元素 (2认同)

小智 5

$("#foo > div").length
Run Code Online (Sandbox Code Playgroud)

jQuery有一个.size()函数,它将返回元素出现的次数,但是,如jQuery文档中所指定的,它较慢并且返回与.length属性相同的值,因此最好只使用.长度属性.从这里:http://www.electrictoolbox.com/get-total-number-matched-elements-jquery/


小智 5

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>
Run Code Online (Sandbox Code Playgroud)