我在jQuery中使用prev()时遇到了麻烦,因为它没有选择正确的元素。
我的HTML结构如下:
<section id="about">
...
</section>
<hr>
<section id="contact">
...
</section>
“有效”部分是#contact。我想选择跳过<hr>
active = active.prev('section')
似乎无法正常工作。我想我可能正在阅读错误的文档...
如果我拿出<hr>
,一切都很美妙。关于如何在prev()上跳过<hr>
的任何想法?
TIA
答案 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)选择最接近的兄弟姐妹。