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:
-
Apart from Temanis answer you can use the not
selector in this case
document.querySelectorAll('li.a:not(.b)')
You can use the :not() pseudo, that's exactly what you need for this job.
https://developer.mozilla.org/en-US/docs/Web/CSS/:not
So all you have to do is
document.querySelector(".a:not(.b)")
But also consider using jQuery, like
$(".someclass").not(".another")
Stansard querySelector is faster, jQ is more readable.
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>