Как выбрать элемент, не имеющий определенного класса

91

Мне интересно, как выбрать элемент, у которого нет определенного класса, с помощью JavaScript, а не jQuery.

Например, у меня есть такой список:

<ul id="tasks">
  <li class="completed selected">One Task</li>
  <li>Two Task</li>
</ul>

и я выбираю выполненную задачу по:

var completeTask = document.querySelector("li.completed.selected");

Но тогда я не уверен, как выбрать элемент списка, у которого нет этих классов.

Джаиун Ли
источник

Ответы:

166

Это выбирает второй LIэлемент.

document.querySelector("li:not([class])")

или

document.querySelector("li:not(.completed):not(.selected)")

Пример:

// select li which doesn't have a 'class' attribute...
console.log(document.querySelector("li:not([class])"))

// select li which doesn't have a '.completed' and a '.selected' class...
console.log(document.querySelector("li:not(.completed):not(.selected)"))
 <ul id="tasks">
    <li class="completed selected">One Task</li>
    <li>Two Task</li>
  </ul>

Ник Грили
источник
17

Чтобы выбрать <li>не имеющий completedни selectedкласса:

document.querySelector("li:not(.completed):not(.selected)");

Скрипка

http://jsfiddle.net/Z8djF/

BeNdErR
источник
Как сделать обратное : то есть, выбрать все элементы , которые имеют как completedи selectedкласс?
user2284570 02
@ user2284570 просто напишите оба класса без пробелов: li.completed.selected-> это будет соответствовать всем тем liэлементам, у которых есть класс completedANDselected
BeNdErR 03
2
document.querySelectorAll('[wf-body=details] input:not(.switch):not(.btn)').forEach(function(e){
    // do whatever you want. with 'e' as element :P
});
Бурхан Ибрагими
источник
1

Попробуйте вместо этого получить массив дочерних элементов родителя:

var completeTask = document.querySelector("#tasks").childNodes;

Затем перебирайте / ищите их по мере необходимости.

хруст
источник