Как выбрать только верхнего уровня li в рекурсивном меню? - PullRequest
13 голосов
/ 08 октября 2010

Как выбрать только li первого уровня? Если я делаю 'ul li', он также выбирает детей. Есть ли способ выбрать только верхний уровень, а не детей с помощью CSS? Если нет, то я согласен с использованием jQuery, но как бы я выбрал его и в этом случае?

<ul>
    <li class="administration first">
        <a href="/administration.aspx"><span>Administration</span></a>
        <ul>
            <li class="users first selected"><a href="/administration/users.aspx"><span>Users</span></a></li>
            <li class="forms last"><a href="/administration/forms.aspx"><span>Forms</span></a></li>
        </ul>
        <div style="clear: both;"></div>
    </li>
    <li class="analytics"><a href="/analytics.aspx"><span>Analytics</span></a></li>
    <li class="options"><a href="/options.aspx"><span>Options</span></a></li>
    <li class="system last"><a href="/system.aspx"><span>System</span></a></li>
</ul>

Ответы [ 11 ]

14 голосов
/ 08 октября 2010

Вам понадобится элемент или класс, который находится выше первого ul, затем укажите {parent-selector} > ul > li.

7 голосов
/ 08 октября 2010

$ ("ul: first> li").

4 голосов
/ 08 октября 2010

Если у вашего ul есть класс или ID, вы можете сделать что-то вроде этого:

$('#myList > li')
2 голосов
/ 01 марта 2012

Вы можете использовать:

$('ul li:not(ul li ul li)')

Это выберет только верхний уровень, но вы также захотите использовать какой-то идентификатор или селектор класса на первом ul, иначе это может помешать содержанию страницы и т. Д.

2 голосов
/ 08 октября 2010

Быстрое исправление, если возможно, состоит в добавлении имени класса на внешнем ul и выборе с помощью $('ul.myClassName > li').

Другой вариант: $('ul > li:has(ul)') это даст вам все, кроме последнего уровня вложенности.

1 голос
/ 07 июня 2011

Как насчет $('ul li').not('ul ul li')
И вы могли бы сделать еще больше, чтобы исключить ul ol li и ol ul li, если вам нужно

1 голос
/ 08 октября 2010
$(".analytics:parent > li")

Будет работать для этого конкретного случая, но вам лучше дать верхнему уровню класс или идентификатор.

Что-то вроде:

$("#top-level-ul > li")

Кажется, легче следовать, чемнеобходимость выбора родителя одного из ваших li s

1 голос
/ 08 октября 2010

Синтаксис селектора jQuery для parent / child :

$('ul > li')

Дочерний комбинатор (E> F) можно рассматривать как более конкретную форму комбинатора-потомка (E F), поскольку он выбирает только потомков первого уровня.

В имеющейся структуре вам может потребоваться указать родительский элемент ul.

0 голосов
/ 21 февраля 2015

Использование обхода JQuery, который обычно работает лучше:

Учитывая, что это первый UL на странице:

$("ul").first().children();

Учитывая, что родительский элемент имеет идентификатор:

$("#TagID").find("ul").first().children();

Учитывая, что UL имеет класс:

$("ul.myClass").children();

Учитывая, что UL имеет идентификатор:

$("#MyID").children();

Учитывая ваш пример первого LI, имеющего определенный класс:

$("li.administration").parent().children();
0 голосов
/ 14 октября 2014

Добавьте класс к первому, если есть класс с

  // Add a class to the first UL element      
  $(".wrapper > ul").addClass("first-level");

  // Target the first classes first li child
  $(".wrapper ul.first-level > li:first-child");

У этого есть некоторые проблемы с ie8 и ниже.

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