Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Exclusive CSS selector

I am working on a page where the selected item among a list is characterized by NOT having a given class. Something like the following:

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

I would like to defined a CSS selector to grab the li node in the page having ONLY the a class. Unsurprisingly the following statement is not enough:

document.querySelectorAll('li.a')

Because it returns ALL the li nodes having the a class.

Any experience on such scenario?

like image 748
Alberto De Caro Avatar asked Dec 11 '22 05:12

Alberto De Caro


1 Answers

In such case you may consider attribute selector like this:

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>

Simply pay attention to extra spaces:

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>

But since you are using JS you can use trim() to get rid of the extra spaces:

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>
like image 140
Temani Afif Avatar answered Dec 25 '22 15:12

Temani Afif