jquery find:selector不能引用调用元素

时间:2012-10-03 01:04:28

标签: jquery

我注意到jquery find中的一个错误。

如果我使用可能引用foo的选择器调用foo.find,它将无效。这里的例子。

http://jsfiddle.net/CgfPj/6/(编辑:更新小提琴,更清楚地解释我正在尝试做什么)

test.find应该能够找到一个div的子节点,但它似乎不能,因为div是测试本身。这是一个错误吗?

3 个答案:

答案 0 :(得分:1)

#test是您引用的div

.find()返回与您指定的选择器匹配的#test的后代。 #test没有后代div,因此test.find("div > span")与任何元素都不匹配。

要获得span的直接#test后代,您应该使用:

test.find("> span")

Fiddle


根据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}}

filter

答案 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>