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

cp3*_*cp3 17 jquery jquery-selectors dom-traversal

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

我的HTML结构如下:

<section id="about">
    ...
</section>
<hr>
<section id="contact">
    ...
</section>
Run Code Online (Sandbox Code Playgroud)

"活动"部分是#contact.我想选择上一节跳过<hr>

active = active.prev('section')似乎不起作用.我想我可能正在阅读错误的文档......

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

TIA

Bol*_*ock 26

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

用于.prev()此描述的API文档:

描述:获取匹配元素集中每个元素的前一个兄弟,可选择由选择器过滤.

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


关于如何跳过<hr>on prev()的任何想法?

你可以拨打.prev()一次跳过hr它,然后再次为该部分调用它:

active = active.prev().prev('section');
Run Code Online (Sandbox Code Playgroud)

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

active = active.prevAll('section').first();
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!所以,无论选择器是什么,prev()都是迈向下一个兄弟的一步?我认为prev('section')将匹配与选择器匹配的第一个兄弟姐妹.我使用了prevAll('section').first()看起来最接近的兄弟是在数组的开头.但仍然感谢你推动我朝着正确的方向前进!:) (6认同)
  • 我认为你的意思是'active = active.prevAll('section').first();` - 请参阅prevAll的文档,其中说明"元素是从最近的兄弟开始按顺序返回的",即它们的顺序相反! (3认同)

Moh*_*lam 7

使用prevAll()代替

active = active.prevAll('section').first();
Run Code Online (Sandbox Code Playgroud)

来自 jQuery 文档:

prev() => “获取前一个兄弟元素所以它只会获取第一个元素。

prevAll() => "获取匹配元素集合中每个元素的所有先前同级元素,可选择由选择器过滤。"

这就是为什么当您删除 时<hr>,它将与prev().