Я хочу покрасить все прямые li
файлы первой ul
которые не имеют типа атрибута данных "земля".
У меня есть следующий JSFIDDLE, но по какой-то причине он выбирает детей подменю, а не прямых детей навигация. Который я, однако, был чем-то .children()
.
JS
$('.nav').children('li:not(:data-type)').css({
color: 'blue'
});
HTML
<nav class="nav">
<ul>
<li data-type="land"><a title="tree" href="#">tree</a>
<div class="locations-wrapper">
<ul class="sub-menu">
<li> <a title="sub-tree-1" href="#">sub-tree-1</a>
</li>
<li> <a title="sub-tree-2" href="#">sub-tree-2</a>
</li>
</ul>
</div>
</li>
<li data-type="land"><a title="bush" href="#">bush</a>
<div class="locations-wrapper">
<ul class="sub-menu">
<li> <a title="sub-bush-1" href="#">bush-tree-1</a>
</li>
<li> <a title="sub-bush-2" href="#">bush-tree-2</a>
</li>
</ul>
</div>
</li>
<li> <a title="sun" href="#">sun</a>
</li>
<li> <a title="clouds" href="#">clouds</a>
</li>
</ul>
</nav>
Я только хочу, чтобы элементы списка "солнце" и "облака" были окрашены.
Можешь попробовать:
$('.nav > ul > li > a:not([data-type="land"])').css({
color: 'blue'
});
Ваш текущий код выдает следующую ошибку:
Ошибка поиска: ошибка синтаксиса, нераспознанное выражение: неподдерживаемый псевдо: тип данных
Чтобы не использовать тип данных, вам нужно будет использовать обозначение атрибута квадратной скобки:
...not('[data-type]')
Однако есть несколько других проблем с вашим кодом:
li
детей nav
, только ul
элементов.li
элементы не имеют data-type
атрибута, только a
элементы внутри них делают. Предполагая, что вы хотите применить это к любому a
элемент, содержащийся в списке, без data-type
атрибута, вы можете просто:
$('.nav').children('ul').find('a').not('[data-type]').css({
color: 'blue'
});
Если ul
элемент всегда будет единственным ребенком вашего nav
элемента, вы можете отбросить .children('ul')
в целом и просто для поиска любого a
элементе, содержащемся в nav
.
Попробуйте использовать .not()
вместе с селектором атрибутов
$('.nav').find('li').not("[data-type]").css({
color: 'blue'
});
Также вы должны использовать .find()
вместо od .children()
потому что .children()
трассирует только первый уровень иерархии. В вашем случае это обыкновение траверс li
редактировать
$('.nav').find('li a').not("[data-type=land]").css({
color: 'red'
});
.nav > ul
, поэтому они тоже будут цветными. Почему бы не нацелитьa[title="tree"]
?