Ответ 1
Вам понадобится элемент или класс, который находится выше первой ul, а затем укажите {parent-selector} > ul > 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>
Вам понадобится элемент или класс, который находится выше первой ul, а затем укажите {parent-selector} > ul > li
.
$( "ul: first > li" ).
Если ваш ul имеет класс или ID, вы можете сделать что-то вроде этого:
$('#myList > li')
Быстрое исправление, если возможно, было бы добавить имя класса на внешнюю ul и выбрать с помощью $('ul.myClassName > li')
.
Другой вариант: $('ul > li:has(ul)')
он даст вам все, кроме последнего уровня вложенности.
Вы можете использовать:
$('ul li:not(ul li ul li)')
Это выберет только верхний уровень, но вы также захотите использовать какой-либо идентификатор или селектор классов на первой странице, или он может помешать содержимому страницы и т.д.
Синтаксис синтаксиса jQuery для parent/child:
$('ul > li')
Детский комбинатор (E > F) можно рассматривать как более конкретную форму комбинатора-потомка (E F) тем, что он выбирает только потомков первого уровня.
При наличии структуры вам может потребоваться указать родительский элемент ul
.
$(".analytics:parent > li")
Будет работать в этом конкретном случае, но вам лучше дать верхний уровень классу или id.
Что-то вроде:
$("#top-level-ul > li")
Намного проще следовать, чем выбрать родителя одного из li
s
Как насчет $('ul li').not('ul ul li')
И вы могли бы сделать дополнительные nots, чтобы исключить ul ol li
и ol ul li
, если вам нужно
Добавьте класс к первому, если он есть с
// 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 и ниже.
Использование обхода JQuery, которое обычно работает лучше:
Учитывая, что это первый UL на странице:
$("ul").first().children();
Учитывая, что родительский элемент имеет идентификатор:
$("#TagID").find("ul").first().children();
Учитывая, что UL имеет класс:
$("ul.myClass").children();
Учитывая, что UL имеет идентификатор:
$("#MyID").children();
Учитывая ваш пример первого LI, имеющего определенный класс:
$("li.administration").parent().children();
$('ul li: first')