我有以下 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测试以查看速度差异,并且该方法在 Chrome(canary build v15)中children()
比子选择器(#foo > div)方法至少高出60% ,在 Firefox(v4)中高出20-30% 。
顺便说一句,不用说,这两种方法产生相同的结果(在本例中为 1000)。
[更新] 我已经更新了测试以包括 size() 与长度测试,它们并没有太大区别(结果:length
使用率略快 (2%) 比size()
)
[更新] 由于在 OP 中看到的标记不正确(在我进行“标记验证”更新之前),两者$("#foo > div").length
&$('#foo').children().length
结果相同(jsfiddle)。但是为了得到正确的答案,只得到'div'孩子,一个应该使用孩子选择器以获得正确和更好的表现
$("#foo > div")
选择所有 div 是 #foo 的直接后代,
一旦您拥有一组孩子,您可以使用 size 函数:
$("#foo > div").size()
或者你可以使用
$("#foo > div").length
两者都会返回相同的结果
$('#foo').children('div').length
为了回应 mrCoders 使用 jsperf 的回答,为什么不只使用 dom 节点?
var $foo = $('#foo');
var count = $foo[0].childElementCount
您可以在这里尝试测试:http: //jsperf.com/jquery-child-ele-size/7
此方法获得 46,095 op/s,而其他方法最多 2000 op/s
$('#foo > div').size()
$("#foo > div").length
jQuery 有一个 .size() 函数,它会返回元素出现的次数,但是,正如 jQuery 文档中所指定的,它速度较慢,并且返回与 .length 属性相同的值,因此最好简单地使用 .length 属性。长度属性。从这里:http ://www.electrictoolbox.com/get-total-number-matched-elements-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>
使用最新版本的 jquery,您可以使用$("#superpics div").children().length
.
var n_numTabs = $("#superpics div").size();
或者
var n_numTabs = $("#superpics div").length;
如前所述,两者都返回相同的结果。
但是 size() 函数更像是 jQuery“PC”。
我的页面也有类似的问题。
现在,只需省略 > 它应该可以正常工作。
$("div", "#superpics").size();
试试这个 div 类型的直接子元素
$("#foo > div")[0].children.length