为什么这些jQuery选择器中的一个工作而另一个不工作?

时间:2009-10-05 22:21:25

标签: jquery css-selectors

$.prev("div.a").find('.b').

$.prev("div.a .b").

一个有效,另一个没有。有什么区别?

2 个答案:

答案 0 :(得分:5)

嗯,选择器有效,它只是没有给你你想要的东西:

根据jQuery Docs .prev([expr])

  

获取一组包含的元素   每个独特的兄弟姐妹   匹配的元素集。用一个   可选表达式来过滤   匹配集。只有立即   以前的兄弟姐妹被退回,而不是全部   以前的兄弟姐妹。

这意味着:$(elem).prev("div.a").find('.b')正在寻找DOM树中的任何先前兄弟div.a并返回第一个 - 然后使用.find()在该元素内搜索{{1} }}

然而:.b正在寻找任何先前的兄弟$(elem).prev("div.a .b")并返回第一个。

它们不等同,因此返回不同的结果。

答案 1 :(得分:0)

find()不搜索所选元素,只搜索它们的后代......所以如果.b类在div.a元素上,你将找不到它。

查找会找到:

<div class="a">
  <div class="b">

但不是:

<div class="a b">

更多: http://docs.jquery.com/Traversing/find