我有以下 HTML 节点结构:
<div id="foo">
<div id="bar"></div>
<div id="baz">
<div id="biz"></div>
</div>
<span></span>
</div>
如何计算的直接孩子的数量foo
,并且是类型的div
?在上面的例子中,结果应该是两个 (bar
和baz
)。
我有以下 HTML 节点结构:
<div id="foo">
<div id="bar"></div>
<div id="baz">
<div id="biz"></div>
</div>
<span></span>
</div>
如何计算的直接孩子的数量foo
,并且是类型的div
?在上面的例子中,结果应该是两个 (bar
和baz
)。
$("#foo > div").length
id 为 'foo' 的元素的直接子元素是 div。然后检索生成的包装集的大小。
我建议使用$('#foo').children().size()
以获得更好的性能。
我创建了一个jsperf测试来查看速度差异,并且该children()
方法在 Chrome(金丝雀版本 v15)中击败子选择器(#foo > div)方法至少60%(在 Firefox(v4)中为20-30%)。
顺便说一句,不用说,这两种方法产生相同的结果(在本例中为 1000)。
[更新] 我已经更新了测试以包含 size() 与长度测试,它们没有太大区别(结果:length
使用速度比 略快(2%)size()
)
[更新] 由于在 OP 中看到的标记不正确(在我进行“标记验证”更新之前),两者$("#foo > div").length
&$('#foo').children().length
结果相同(jsfiddle)。但是为了获得只有“div”孩子的正确答案,应该使用孩子选择器以获得正确和更好的性能
$("#foo > div")
一旦你有了一组孩子,你就可以选择 #foo 的直接后代的所有 div,你可以使用 size 函数:
$("#foo > div").size()
或者你可以使用
$("#foo > div").length
两者都会返回相同的结果
$('#foo').children('div').length
为了回应使用 jsperf 的 mrCoders 答案,为什么不直接使用 dom 节点?
var $foo = $('#foo');
var count = $foo[0].childElementCount
您可以在这里尝试测试:http : //jsperf.com/jquery-child-ele-size/7
此方法获得 46,095 op/s 而其他方法最多 2000 op/s