我想为没有数据属性类型为“land”的第一个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>
我只希望li列表项“sun”和“clouds”被着色。
答案 0 :(得分:2)
您当前的代码抛出以下错误:
未捕获错误:语法错误,无法识别的表达式:unsupported pseudo:data-type
要执行 not data-type ,您必须使用方括号属性表示法:
...not('[data-type]')
但是您的代码还有其他一些问题:
li
只有nav
个孩子,只有ul
个元素。li
元素具有data-type
属性,只有a
个元素属于。{/ li>
醇>
假设您要将其应用于列表中包含的任何 a
元素且没有data-type
属性,您只需:
$('.nav').children('ul').find('a').not('[data-type]').css({
color: 'blue'
});
如果ul
元素始终是nav
元素的唯一子元素,则可以完全删除.children('ul')
并只搜索其中包含的任何a
元素nav
。
答案 1 :(得分:1)
尝试.not()
和has attribute selector
$('.nav').find('li').not("[data-type]").css({
color: 'blue'
});
此外,您应该使用.find()
而不是.children()
,因为.children()
仅限于第一层次的层次结构。在你的情况下,它不会遍历li
修改强>
$('.nav').find('li a').not("[data-type=land]").css({
color: 'red'
});
答案 2 :(得分:1)
您可以尝试:
$('.nav > ul > li > a:not([data-type="land"])').css({
color: 'blue'
});
<强> jsFiddle example 强>