假设我有html结构
ul
li //this one
ul
li
li
li
li //this one
Run Code Online (Sandbox Code Playgroud)
我不想得到所有li的.正如我评论的那样,我只想得到第一段李.我该如何选择它们?
document.querySelectorAll("ul > li");
Run Code Online (Sandbox Code Playgroud)
返回所有li的.
编辑:实际上这只是树的一小部分.
我无法将结构修改为添加类或ID.我在寻找的答案,得到第一层的名单li小号
您需要选择祖父母不是另一个列表项的所有li项.
:not(li) > * > li {}
Run Code Online (Sandbox Code Playgroud)
这仅在标记中没有额外元素时才有效.
例如,它将失败:
<ul>
<li>
<div>
<ul>
<li>
Run Code Online (Sandbox Code Playgroud)
一种较慢但更可靠的方法是获取所有列表项,然后筛选出具有列表项祖先的项.
var lis = document.getElementsByTagName('li');
var lis_without_li_ancestors = [];
for (var i = 0; i < lis.length; i++) {
var element = lis[i];
if (!has_li_ancestor(element)) {
lis_without_li_ancestors.push(element);
}
}
console.log(lis_without_li_ancestors);
function has_li_ancestor(element) {
var parent = element.parentNode;
if (parent.tagName.toLowerCase() === "body") {
return false;
} else if (parent.tagName.toLowerCase() === "li") {
return true;
} else {
return has_li_ancestor(parent);
}
}Run Code Online (Sandbox Code Playgroud)
<ul>
<li>
<ul>
<li>...
</ul>
</ul>Run Code Online (Sandbox Code Playgroud)
在jQuery中,您可以使用此选择器ul > li:not('ul > li > ul > li'):
$("ul > li:not('ul > li > ul > li')").css("background", "green");Run Code Online (Sandbox Code Playgroud)
ul > li {
background: white;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li>
First
<ul>
<li>
Second
<ul>
<li>Third</li>
</ul>
</li>
<li>Second</li>
<li>Second</li>
<li>Second</li>
</ul>
</li>
<li>First</li>
<li>First</li>
<li>First</li>
</ul>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6930 次 |
| 最近记录: |