我注意到jquery find中的一个错误。
如果我使用可能引用foo的选择器调用foo.find,它将无效。这里的例子。
http://jsfiddle.net/CgfPj/6/(编辑:更新小提琴,更清楚地解释我正在尝试做什么)
test.find应该能够找到一个div的子节点,但它似乎不能,因为div是测试本身。这是一个错误吗?
答案 0 :(得分:1)
#test
是您引用的div
。
.find()
返回与您指定的选择器匹配的#test
的后代。 #test
没有后代div
,因此test.find("div > span")
与任何元素都不匹配。
要获得span
的直接#test
后代,您应该使用:
test.find("> span")
根据OP编辑进行编辑:
$("#test > span, #test div > span")
将获得span
的所有#test
个直接后代以及所有span
元素div
内#test
内:parentIs(div)
的后代 - {{3} }}
就我所知,CSS选择器规范和jQuery中没有var spans = test.find('span').filter(function() {
return $(this).parent()[0].tagName.toLowerCase() === 'div';
});
$("#result").text(spans.length);
选择器这样的东西,但你可以通过使用fiddle函数轻松填补这个空白: / p>
{{1}}
答案 1 :(得分:0)
如果我正在看这个......
var test = $("#test");
$("#result").text(test.find("div > span").length)
$("#result2").text($("div > span").length)
将test
定义为div本身的元素。你基本上告诉find
寻找另一个在该div中有跨度的div。试试
$("#result").text(test.find("span").length)
答案 2 :(得分:0)
<div id="test">
<span>hello</span>
</div>
$("#result").text(test.find("div > span").length)
长度= 0的输出绝对正确..这不是错误,而是预期的行为。
您的跨度嵌套在div中 #test
test.find("div > span")
//试图找到一个跨度,它是嵌套在#test div中的div的子节点。因为它在#test中没有div,所以这将给你0。
本例中返回1的HTML是
<div id="test">
<div>
<span>hello</span>
</div>
</div>