如何定位平面层次结构中的特定兄弟姐妹组?

2022-01-10 00:00:00 css-selectors css

假设你有这个 HTML:

Assume you have this HTML:

<h1>Header 1</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<h1>Header 1</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<h1>Header 1</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>

请注意,层次结构是扁平的.

Note that the hierarchy is flat.

现在尝试选择 <p> 元素的中间对".这可能吗?我实在想不通.

Now try to select the "middle pair" of <p> elements. Is this possible? I really can't figure out how.

这个选择器只抓取<h1>之后的第一个<p>:

This selector only grabs the first <p> following the <h1>:

h1:nth-of-type(2) + p

但是这个选择器会抓取正确的一对 <p> 元素加上所有出现在后面的 <p> 元素我们想要的一对:

But this selector grabs the correct pair of <p> elements plus all the following <p> elements that appear after the pair we want:

h1:nth-of-type(2) ~ p

有可能吗?

没有 JavaScript.没有标记更改.通用解决方案.允许任意数量的 <h1>s 或 <p>s,在这种情况下,数字 2 是任意的.

No JavaScript. No markup changing. Generic solution. Any number of <h1>s or <p>s are allowed, and the number two, in this case, is arbitrary.

我在想也许这可以使用一些使用 :not() 选择器,但我似乎无法弄清楚.有点像选择一般兄弟姐妹",然后根据需要排除,或类似的东西.

I'm thinking maybe this is possible using some using the :not() selector, but I can't seem to figure it out. Kind of like selecting the "general siblings" and then excluding as necessary, or something similar.

推荐答案

由于一般同级组合器的工作方式,不可能将同级的选择限制在特定范围或组中,即使是连续的同级.甚至 :not() 选择器在这里也没有任何帮助.

Due to the way the general sibling combinator works, it is not possible to limit a selection of siblings to a specific range or group, even of consecutive siblings. Even the :not() selector won't be of any help here.

您将必须使用 JavaScript 来定位正确的元素.jQuery 的 .nextUntil() 方法 立即浮现在脑海中.

You will have to use JavaScript to target the right elements. jQuery's .nextUntil() method immediately springs to mind.

相关文章