CSS 选择器仅适用于两个类,无其他类

Bra*_*ess 4 css css-selectors

我正在寻找某种 CSS 选择器,它只会从只有这两个特定类而没有其他内容的表中选择某些单元格。为了更清楚起见,这里有一个示例。

因此,在此表中,我想从行中选择单元格 A 和 D 进行样式设置,但选择它们的唯一可区分方法是它们除了 .abc 和 .xyz 之外没有任何类。所以本质上我需要过滤掉任何具有任何其他类的单元格,即.def、.ghi。

<tr>
  <td class="abc xyz">A</td>
  <td class="abc xyz def">B</td>
  <td class="abc xyz ghi">C</td>
  <td class="abc xyz">D</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

现在我知道我可以使用 not 选择器来处理它,但是这些类从外部源注入到表中,并且可以添加新类,我真的不想继续添加到不断增长的要忽略的类列表中。

td.abc.xyz:not(.def),
td.abc.xyz:not(.ghi) {
  /* Style to apply */
}
Run Code Online (Sandbox Code Playgroud)

因此,如果有人能为我指明正确的方向,找到任何有帮助的事情,我将不胜感激。

Tem*_*fif 5

您可以考虑属性选择器,但要注意空格和顺序:

[class="abc xyz"],
[class="xyz abc"] {
  color:red;
}
Run Code Online (Sandbox Code Playgroud)
<table>
<tr>
  <td class="abc xyz">A</td>
  <td class="abc xyz def">B</td>
  <td class="abc xyz ghi">C</td>
  <td class="abc xyz">D</td>
  <td class="xyz abc">D</td>
  <td class="abc xyz ">this will fail</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)

如果你可以添加一些JS,你可以使用避免空格问题trim

var td=document.querySelectorAll('td');
for(var i=0;i<td.length;i++)
  td[i].className=td[i].className.trim();
Run Code Online (Sandbox Code Playgroud)
[class="abc xyz"],
[class="xyz abc"] {
  color:red;
}
Run Code Online (Sandbox Code Playgroud)
<table>
<tr>
  <td class="abc xyz">A</td>
  <td class="abc xyz def">B</td>
  <td class="abc xyz ghi">C</td>
  <td class="abc xyz">D</td>
  <td class="xyz abc">D</td>
  <td class="abc xyz ">this will be good</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)