【发布时间】:2020-07-31 20:13:16
【问题描述】:
我给定了一些相当讨厌的 HTML,并希望遍历给定标题下的所有列表元素。不幸的是,我想跳过这两者之间的一些 cmets。
<header><h2>A</h2></header>
<ul class="list">...</ul>
<header><h2>C</h2></header>
<p>Some comment</p>
<ul class="list">...</ul>
<p>Another comment</p>
<ul class="list">...</ul>
<header><h2>B</h2></header>
<p>Some comment</p>
<ul class="list">...</ul>
我试过document.querySelectorAll('h2 ~ .list:not(h2)'),但这没有任何回报。
所以,理想情况下,我会检查每个标题,并为每个标题检索lists,类似于
const headers = document.querySelectorAll('h2');
for(let i = 0; i < headers.length; ++i)
{
// Somehow get an Array of `list` elements between h2 i and i+1
}
【问题讨论】:
-
“但这什么都不返回” -
~是通用的 sibling 组合子。您的h2和.list元素 不是 兄弟姐妹。这些列表是header元素的兄弟,所以你的组合器必须从它开始。 -
而且
.list:not(h2)一开始就毫无意义——你没有一个h2元素与该类在这里,所以你不需要首先“排除”它们。 -
您不能遍历每个标题并获取其列表,因为该列表不是任何标题的子级...如果标题不是列表的父级无关紧要而且您不想在其中发表评论,您不能只通过 .list 类进行选择吗?老实说,有了更好的 html 结构,您就不必像这样搜索所有古怪的东西,您的代码将更容易阅读......
标签: javascript css css-selectors