CSS 仅影响嵌套列表中的父列表
CSS Affect only parent list in the nested list
我有一个嵌套列表,如下所示。我正在努力寻找可以在 querySelectorAll()
JavaScript 函数中使用的特定 CSS 选择器,它只会影响所有 <li>
不包含 <ul>
的标签] 标签。所以在这种情况下,它应该只是行
<li>foot</li>
<li>leg</li>
<li>tiger</li>
<li>elephant</li>
<li>food</li>
我尝试了 querySelectorAll("ol > li")
和其他一些使用 :not()
选择器的方法,但没有成功。
querySelectorAll("ol > li ul")
与我想要的相反,因为当我使用
console.log(document.getElementById("translation").querySelectorAll("ol > li ul").length)
它 returns 3
.
我需要以下类型的代码 console.log(document.getElementById("translation").querySelectorAll(
blank).length)
,它将 return 5
。不知道可不可以,网上也找不到。
另一种看待它的方法是让 CSS 的代码只为不包含其他嵌套列表的项目着色(这样只有点 2-6 会有彩色背景):
#translation ol > li ul{
background-color: cyan;
}
整个列表:
<div id="translation">
<ol>
<li>
<ul>
<li>parting</li>
<li>parting</li>
<li>parting</li>
<li>separation</li>
<li>separation</li>
<li>separation</li>
<li>farewell</li>
<li>(lateral) branch</li>
<li>fork</li>
<li>offshoot</li>
</ul>
</li>
<li>foot</li>
<li>leg</li>
<li>tiger</li>
<li>elephant</li>
<li>food</li>
<li>
<ul>
<li>branch</li>
<li>parting</li>
<li>disaffiliation</li>
<li>disaffiliation</li>
<li>separation</li>
<li>(lateral) branch</li>
<li>farewell</li>
<li>branch</li>
<li>division</li>
</ul>
</li>
<li>
<ul>
<li>dissociation</li>
<li>disaffiliation</li>
<li>dissociation</li>
</ul>
</li>
</ol>
</div>
如果您能够使用 jQuery,则使用 :not 选择器来捕获具有 ul 作为子元素的元素。
像这样:
$("translation").find("ol > li:not(:has(>ul))")
请注意,此解决方案适用于 jQuery 选择器,但不适用于 Vanilla JS(Vanilla JS 不支持 :has
作为选择器)。
使用 Vanilla JS,你可能想做这样的事情:
const elems = document.getElementById("translation").querySelectorAll('ol > li');
let items = Array.from(elems); // convert to Array type
items.filter(item => { // filter the array
item.querySelectorAll('ul').length == 0
})
你需要检查每个li是childNodes有ul。例如像这样:
const test = [...document.querySelectorAll("ol > li")].filter(
li => ![...li.childNodes].find(child => child.localName === "ul")
);
我有一个嵌套列表,如下所示。我正在努力寻找可以在 querySelectorAll()
JavaScript 函数中使用的特定 CSS 选择器,它只会影响所有 <li>
不包含 <ul>
的标签] 标签。所以在这种情况下,它应该只是行
<li>foot</li>
<li>leg</li>
<li>tiger</li>
<li>elephant</li>
<li>food</li>
我尝试了 querySelectorAll("ol > li")
和其他一些使用 :not()
选择器的方法,但没有成功。
querySelectorAll("ol > li ul")
与我想要的相反,因为当我使用
console.log(document.getElementById("translation").querySelectorAll("ol > li ul").length)
它 returns 3
.
我需要以下类型的代码 console.log(document.getElementById("translation").querySelectorAll(
blank).length)
,它将 return 5
。不知道可不可以,网上也找不到。
另一种看待它的方法是让 CSS 的代码只为不包含其他嵌套列表的项目着色(这样只有点 2-6 会有彩色背景):
#translation ol > li ul{
background-color: cyan;
}
整个列表:
<div id="translation">
<ol>
<li>
<ul>
<li>parting</li>
<li>parting</li>
<li>parting</li>
<li>separation</li>
<li>separation</li>
<li>separation</li>
<li>farewell</li>
<li>(lateral) branch</li>
<li>fork</li>
<li>offshoot</li>
</ul>
</li>
<li>foot</li>
<li>leg</li>
<li>tiger</li>
<li>elephant</li>
<li>food</li>
<li>
<ul>
<li>branch</li>
<li>parting</li>
<li>disaffiliation</li>
<li>disaffiliation</li>
<li>separation</li>
<li>(lateral) branch</li>
<li>farewell</li>
<li>branch</li>
<li>division</li>
</ul>
</li>
<li>
<ul>
<li>dissociation</li>
<li>disaffiliation</li>
<li>dissociation</li>
</ul>
</li>
</ol>
</div>
如果您能够使用 jQuery,则使用 :not 选择器来捕获具有 ul 作为子元素的元素。 像这样:
$("translation").find("ol > li:not(:has(>ul))")
请注意,此解决方案适用于 jQuery 选择器,但不适用于 Vanilla JS(Vanilla JS 不支持 :has
作为选择器)。
使用 Vanilla JS,你可能想做这样的事情:
const elems = document.getElementById("translation").querySelectorAll('ol > li');
let items = Array.from(elems); // convert to Array type
items.filter(item => { // filter the array
item.querySelectorAll('ul').length == 0
})
你需要检查每个li是childNodes有ul。例如像这样:
const test = [...document.querySelectorAll("ol > li")].filter(
li => ![...li.childNodes].find(child => child.localName === "ul")
);