【问题标题】:jquery find previous based on class namejquery根据类名查找上一个
【发布时间】:2010-07-26 02:12:29
【问题描述】:

我正在尝试使用 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>

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

我知道如果列表结构正确,这会容易得多,但不幸的是,这是我必须处理的。 :/

【问题讨论】:

    标签: jquery find


    【解决方案1】:

    您可以使用.prevAll():first 来实现,如下所示:

    $("#active").parent().prevAll(":has(.mainlevel):first")​.children()
    

    Give it a try here

    这会上升到父级,然后搜索所有包含提供的选择器的先前兄弟姐妹(使用:has()),并且它们的顺序相反(最近的兄弟姐妹优先),所以你想要:first一个,然后去孩子那里得到&lt;li&gt;里面的&lt;a&gt;

    【讨论】:

    • +1 - 是的,:has() 将其封顶。不知道我在想什么! :o)
    • 有什么方法可以隐藏属于主级别“组”的子级别项目,该主级别“组”没有以“活动”为 id 的项目?
    • @SoulieBaby: 主关卡不是&lt;li&gt; 的兄弟姐妹集有什么原因,每个兄弟姐妹都在下面有一个&lt;ul&gt;,包含&lt;li&gt; 元素,它们是.sublevel 的元素?这将大大简化一切。
    • 我正在尝试修改一个已经结构化的系统,我无权访问特定文件来重新执行该列表:S 我只能修改某些页面 sigh
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 2019-10-24
    • 2011-04-09
    • 2010-12-20
    • 1970-01-01
    • 2023-03-17
    • 2011-02-28
    相关资源
    最近更新 更多