【问题标题】:CSS selector for only two classes and no othersCSS 选择器仅用于两个类,没有其他类
【发布时间】:2019-05-23 14:57:37
【问题描述】:

我正在寻找某种 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>

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

td.abc.xyz:not(.def),
td.abc.xyz:not(.ghi) {
  /* Style to apply */
}

因此,如果有人可以为我指出正确的方向,任何可以提供帮助的东西,将不胜感激。

【问题讨论】:

  • 我建议虽然这在 CSS 中是可能的,但在 JavaScript 中可能更容易/更可靠。例如:Array.from(document.querySelectorAll('.abc.xyz')).filter(elem=&gt;elem.classList.length === 2);

标签: css css-selectors


【解决方案1】:

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

[class="abc xyz"],
[class="xyz abc"] {
  color:red;
}
<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>

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

var td=document.querySelectorAll('td');
for(var i=0;i<td.length;i++)
  td[i].className=td[i].className.trim();
[class="abc xyz"],
[class="xyz abc"] {
  color:red;
}
<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>

【讨论】:

    【解决方案2】:
    [class="abc xyz"], [class="xyz abc"] { … }
    

    【讨论】:

      猜你喜欢
      • 2019-12-14
      • 2017-10-16
      • 2023-03-19
      • 2013-04-04
      • 2011-04-15
      • 2017-02-08
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      相关资源
      最近更新 更多