jquery根据类名找到之前的版本

Sou*_*aby 1 jquery find

我正在尝试使用jquery根据它的类名来查找项目.基本上我有这个结构:

<ul class="vm_cat">
    <li><a class="mainlevel" href="/">MAIN LEVEL 1</a></li>
    <li><a class="sublevel" href="/">sub 1 a</a></li>
    <li><a class="sublevel" href="/">sub 1 b</a></li>
    <li><a class="sublevel" href="/">sub 1 c</a></li>
    <li><a class="sublevel" href="/">sub 1 d</a></li>
    <li><a class="mainlevel" href="">MAIN LEVEL 2</a></li>
    <li><a class="sublevel" href="/">sub 2 a</a></li>
    <li><a class="sublevel" href="/" id="active">sub 2 b</a></li>
    <li><a class="sublevel" href="/">sub 2 c</a></li>
    <li><a class="mainlevel" href="/">MAIN LEVEL 3</a></li>
    <li><a class="sublevel" href="/">sub 3 a</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我希望jQuery找到哪个标签的id为"active",然后找到前一个带有"mainlevel"的标签.所以它会找到"sub 2 b",然后找到"MAIN LEVEL 2",因为它是前一个带有"mainlevel"类的标签..如果这有意义吗?

我知道如果列表结构正确,这会更容易,但不幸的是,这是我必须要处理的事情.:/

Nic*_*ver 5

你可以使用.prevAll():first这样做:

$("#active").parent().prevAll(":has(.mainlevel):first")?.children()
Run Code Online (Sandbox Code Playgroud)

试一试吧

这取决于父,然后搜索包含所提供的选择器(使用:has())的所有以前的兄弟姐妹,并且它们是相反的顺序(最近的兄弟姐妹),所以你想要那个:first,然后去孩子进入<a>里面<li>.