独家CSS选择器

时间:2018-09-28 14:11:06

标签: javascript css css-selectors

我正在处理一个页面,其中列表中的所选项目的特征是没有给定的类。类似于以下内容:

<ul>
  <li class="a">not selected</li>
  <li class="a b">selected</li>
  <li class="a">not selected</li>
</ul>

我想定义一个CSS选择器来获取只有a类的页面中的li节点。 不足为奇的是,以下语句是不够的:

document.querySelectorAll('li.a')

因为它返回所有具有 a 类的 li 节点。

在这种情况下有经验吗?

3 个答案:

答案 0 :(得分:8)

在这种情况下,您可以考虑使用以下属性选择器:

console.log(document.querySelectorAll('li[class="a"]').length)
li[class="a"] {
  color:red;
}
<ul>
  <li class="a">Select me</li>
  <li class="a b c d more classes">Don't select me</li>
  <li class="a b">Don't select me</li>
  <li class="a">Select me</li>
</ul>

只需注意多余的空格:

console.log(document.querySelectorAll('li[class="a"]').length)
li[class="a"] {
  color:red;
}
<ul>
  <li class="a ">Pay attention to this one !!</li>
  <li class="a b">Don't select me</li>
  <li class="a">Select me</li>
</ul>

但是由于您使用的是JS,因此可以使用trim()来消除多余的空格:

var elem=document.querySelectorAll('li');
for(var i=0;i<elem.length;i++)
  elem[i].className=elem[i].className.trim();

console.log(document.querySelectorAll('li[class="a"]').length)
li[class="a"] {
  color:red;
}
<ul>
  <li class="a ">Pay attention to this one !!</li>
  <li class="a b">Don't select me</li>
  <li class="a">Select me</li>
</ul>

答案 1 :(得分:2)

在这种情况下,除了Temanis answer之外,您还可以使用subscribe选择器

not

答案 2 :(得分:0)

您可以使用:not()伪指令,这正是您需要的工作。

https://developer.mozilla.org/en-US/docs/Web/CSS/:not

所以您要做的就是

document.querySelector(".a:not(.b)")

但是也可以考虑使用jQuery,例如

$(".someclass").not(".another")

Stansard querySelector更快,jQ更具可读性。