Búsqueda de sitios web

javascript - Cómo seleccionar un elemento que no tiene una clase específica


Me pregunto cómo seleccionar un elemento que no tenga una clase específica usando JavaScript, no jQuery.

Por ejemplo, tengo esta lista:

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

y selecciono la tarea completada por:

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

Pero entonces no estoy seguro de cómo seleccionar el elemento de la lista que no tiene esas clases.

Respuesta #1

Esto selecciona el segundo elemento LI.

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

o

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

Ejemplo:

// 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>

Respuesta #2

Para seleccionar el <li> que no tiene la clase completed ni selected:

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

Violín

http://jsfiddle.net/Z8djF/

Respuesta #3

Puedes probar el selector :not()

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

http://jsfiddle.net/UM3j5/

Respuesta #4

El selector :not(*selector*) también acepta comas (al igual que querySelectorAll()) https://developer.mozilla.org/en-US/docs/Web/CSS/:not#syntax:

let plainElements = document.querySelectorAll( ':not( .completed, .in-progress ) ');
plainElements.forEach( ( item ) => { item.style.color = 'red'; } );
li { color: green; }
<ul id="tasks">
  <li class="completed selected">Task 1</li>
  <li>Task 2</li>
  <li class="in-progress">Task 3</li>
</ul>

Artículos relacionados