1

HTML

<div id="t">
    <input type="button" class="theClass" />
    <input type="button" class="theClass" />
    <input type="button" class="notTheClass" />
</div>

Javascript

var result = $('#t > input').find('.theClass').length;
console.log(result);

预期结果:2

实际结果:0

JSFiddle:这里


来自.find() 上的 jQuery 规范

获取当前匹配元素集中每个元素的后代,由选择器过滤

有人可以解释一下为什么.find()要过滤掉所有元素而不是只返回我正在搜索的 2 吗?

旁注: $('#t > input').length正确返回:3

4

5 回答 5

8

你为什么使用 find ?你什么时候可以做到这一点。

var result = $('#t > input.theClass').length;
于 2013-10-01T16:09:43.913 回答
4
$("#t > input").filter(".theClass")

http://jsfiddle.net/MTt4u/

于 2013-10-01T16:08:40.157 回答
3

您正在查看输入,这是错误的,因为您什么也找不到。这样做:

var result = $('#t').find('input.theClass').length;
于 2013-10-01T16:08:03.670 回答
1

'.theClass'在您的代码中,您正在寻找input. 你需要做:

var result = $('#t input.theClass').length;

或者

var result = $('#t').find('input.theClass').length;
于 2013-10-01T16:12:22.807 回答
0

这可以很容易地完成

var result = $('#t > .theClass').length;

没有理由使用find().

于 2013-10-01T16:10:06.133 回答