JQuery найти предыдущий на основе имени класса - PullRequest
1 голос
/ 26 июля 2010

Я пытаюсь использовать 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 обнаружил, какой тег имеет идентификатор «active», а затем нашел предыдущий тег с «mainlevel». Таким образом, он найдет «sub 2 b», а затем найдет «MAIN LEVEL 2», так как он является предыдущим тегом с классом «mainlevel».

Я знаю, что было бы намного проще, если бы список был правильно структурирован, но с этим я, к сожалению, должен работать. : /

1 Ответ

5 голосов
/ 26 июля 2010

Вы можете сделать это, используя .prevAll() и :first, например:

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

Попробуйте здесь

Это идет до родителя, затем ищет всех предыдущих братьев и сестер, которые содержат предоставленный селектор (используя :has()), и они в обратном порядке (ближайший брат в первую очередь), поэтому вы хотите, чтобы :first один, затем идите к ребенку, чтобы получить <a> внутри <li>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...