CSS 选择:在祖先类中的第 n 个项目之间切换

Posted

技术标签:

【中文标题】CSS 选择:在祖先类中的第 n 个项目之间切换【英文标题】:CSS Selection: toggling between nth items within an ancestor class 【发布时间】:2022-01-23 20:04:57 【问题描述】:

我在一个共同的祖先中有两个嵌套类,例如:

<div class="css-18e3th9">
  <div class="x1">
    <div class="x2">
    ..
      <div class="css-t0qh0m">
      </div>
    ..
    </div>
  </div>
  ..

  ..
  <div class="x1">
    <div class="x2">
    ..
      <div class="css-t0qh0m">
      </div>
    ..
    </div>
  </div>

</div>

在共同祖先 (css-18e3th9) 和目标类之间有很多 div 和类:css-t0qh0m。我无法计算所有中间类,它们可能会随着时间动态变化。

我正在尝试以不同的方式设置目标类css-t0qh0m 的样式。如何独立选择每个?目前只有两个目标类,但未来可能会更多。

【问题讨论】:

通常你会为这两个/全部分配一个单独的 id="somethingunique" ,然后基于它的样式(#somethingunique color: blue; ),但我得到的印象是你可能无法控制标记? @Raxi 正确 - 我必须在生成后调整标记。 据我所知,那时仅使用 CSS 是不可能的,因为没有什么可以锚定的,虽然它们确实有一个共同的祖先,但它们没有共享一个父对象,因此通常的::nth-child-type 选择器在这里不是一个选项。但是,如果您愿意,可以使用 javascript 来完成。 @Raxi 感谢您的帮助。是否可以在整个文档中选择第 n 个id?例如,如果他们都共享相同的 id,并且他们是唯一的两个 divs 这样做? id 属性可能永远不会重复。有nth-last-of-type-selectors 之类的,但没有一个适合你在这里的场景,(例如,选择器没有与类组合,所以它会根据 all @ 987654332@s,不只是 css-t0qh0m 的) 【参考方案1】:

正如 cmets 中所述,我认为没有纯 CSS 方法可以实现这一点(因为 html 标记无法控制)。 如果您能够添加 javascript,那么这样的事情应该可以解决问题:

let items = document.querySelectorAll('div.css-18e3th9');
for (let i = 0; i < items.length; ++i) 
  items[i].id = 'autorenamed-css-' + (i + 1);

这会给第一个div.css-18e3th9 一个id=autorenamed-css-1 属性,下一个id=autorenamed-css-2,等等。这样您就可以应用您的样式,例如

#autorenamed-css-1  background-color: red;  
#autorenamed-css-2  background-color: blue; 

【讨论】:

以上是关于CSS 选择:在祖先类中的第 n 个项目之间切换的主要内容,如果未能解决你的问题,请参考以下文章

如何确定方法是不是在 Smalltalk 中对象的祖先类中定义

选择性清除 IE7 中的浮动项目

这个图片切换动画只用CSS3实现

CSS结构伪类选择器

替换文件中的第 N 个字符串匹配项

如何确定Javascript中项目网格中的选择范围之间的重叠