我注意到 jquery find 中的一个错误。
如果我使用可能引用 foo 本身的选择器调用 foo.find,它将不起作用。这里的例子。
http://jsfiddle.net/CgfPj/6/(编辑:更新小提琴以更清楚地解释我想要做什么)
test.find 应该能够找到一个作为 div 子级的跨度,但它似乎不能,因为 div 是测试本身。这是一个错误吗?
我注意到 jquery find 中的一个错误。
如果我使用可能引用 foo 本身的选择器调用 foo.find,它将不起作用。这里的例子。
http://jsfiddle.net/CgfPj/6/(编辑:更新小提琴以更清楚地解释我想要做什么)
test.find 应该能够找到一个作为 div 子级的跨度,但它似乎不能,因为 div 是测试本身。这是一个错误吗?
#test
是div
你引用的。
.find()
#test
返回匹配给定选择器的后代。#test
没有后代div
s,因此test.find("div > span")
不匹配任何元素。
要获得您的直系span
后代,#test
应使用:
test.find("> span")
根据 OP 编辑进行编辑:
$("#test > span, #test div > span")
将获得所有span
s 的直接后代#test
以及s 内部的所有span
元素的直接后代。div
#test
:parentIs(div)
据我所知,CSS 选择器规范和 jQuery 中都没有选择器之类的东西,但是您可以使用过滤器功能轻松填补这一空白:
var spans = test.find('span').filter(function() {
return $(this).parent()[0].tagName.toLowerCase() === 'div';
});
$("#result").text(spans.length);
如果我看这个权利..
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)
<div id="test">
<span>hello</span>
</div>
$("#result").text(test.find("div > span").length)
长度 = 0 的输出是绝对正确的。这不是错误,而是预期的行为。
您的 span 嵌套在带有#test的 div 内
test.find("div > span")
// 试图找到一个跨度,它是嵌套在#test div 中的 div 的子对象。因为它在#test 中没有 div,所以这会给你 0。
在这种情况下将返回 1 的 HTML 是
<div id="test">
<div>
<span>hello</span>
</div>
</div>