jQuery:prev(<selector>)不工作?</selector>

时间:2011-03-27 22:28:20

标签: jquery jquery-selectors dom-traversal

我在jQuery中使用prev()时遇到了麻烦,因为它没有选择正确的元素。

我的HTML结构如下:

<section id="about">
    ...
</section>
<hr>
<section id="contact">
    ...
</section>

“有效”部分是#contact。我想选择跳过<hr>

的上一部分

active = active.prev('section')似乎无法正常工作。我想我可能正在阅读错误的文档...

如果我拿出<hr>,一切都很美妙。关于如何在prev()上跳过<hr>的任何想法?

TIA

4 个答案:

答案 0 :(得分:26)

  

我想我可能正在阅读错误的文档...

API docs for .prev()给出了这样的描述:

  

说明:获取匹配元素集中每个元素的前一个兄弟,可选择由选择器进行过滤。

所以,问题是hr在那里并被.prev()搜索,然后针对'section'选择器进行了测试。


  

有关如何跳过prev {)的<hr>的任何想法?

您可以拨打.prev()一次跳过该hr,然后再次拨打该部分:

active = active.prev().prev('section');

或者使用.prevAll()并找到最接近的前一个(如果之前还有其他任何部分发生):

active = active.prevAll('section').first();

答案 1 :(得分:4)

使用prevAll()代替

active = active.prevAll('section')
来自jQuery文档的

prev()=&gt; “获取前一个兄弟姐妹”所以它只会获得第一个元素,这就是为什么当你删除<hr>时它会起作用。

答案 2 :(得分:1)

或尝试:

<section id="about">
    ...
<hr>
</section>
<section id="contact">
    ...
</section>

答案 3 :(得分:1)

就做

active = active.prevAll('section').eq(0);

似乎.prev()和.next()仅选择最接近的兄弟姐妹,无论是否为其提供特定的选择器。如果该选择器与同级不匹配,则.next('section')。length将为0。 因此,通过使用上述方法,您可以获得与选择器匹配的所有前面的兄弟姐妹,并使用.eq(0)选择最接近的兄弟姐妹。