我偶然发现了这个关于 CSS 选择器的问题。即选择第一次出现的<span>
但忽略其层次结构。我知道我可以使用 JavaScript 来document.querySelectorAll('span')
获取第一个 DOM 对象并为其分配类。但是有没有办法避免使用 JavaScript 来实现它?
HTML 结构是任意的,因此像这样的选择器div:first-child > p:first-of-type > div:first-of-type span:first-of-type
太具体了。我希望选择器即使在 HTML 结构改变时也能正常工作。
我曾经尝试过类似的事情,但我不确定为什么MISS ME 4
也被选中。
span:first-of-type:not(:has(span):nth-child(n+2 of :has(span)) span) {
color: red;
font-weight: bold;
}
<div>
<h1>Select the first occurrence of span</h1>
<p>
<span>HIT ME</span>
<div>
<span>MISS ME 1</span>
<span>MISS ME 2</span>
<span>MISS ME 3</span>
</div>
<span>MISS ME 4</span>
<span>MISS ME 5</span>
</p>
<p>
<span>MISS ME 6</span>
<span>MISS ME 7</span>
</p>
</div>
<div>
<p>
<span>MISS ME 7</span>
<span>MISS ME 8</span>
</p>
<p>
<span>MISS ME 9</span>
<span>MISS ME 10</span>
<span>MISS ME 11</span>
</p>
<p>
<span>MISS ME 12</span>
<span>MISS ME 13</span>
<span>MISS ME 14</span>
<div>
<span>MISS ME 15</span>
<span>MISS ME 16</span>
<span>MISS ME 17</span>
</div>
</p>
</div>
这有可能吗?我完全没有主意了。
要选择文档中的第一个跨度,请选择跨度元素:
使用:
一个更通用的版本也应该适用于类:
应用于你的例子: