Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript: Add/remove a single class on multiple elements

How can I add/remove a single class on multiple class-selected elements.

In my setup I have some variables cached for doesn't stuff to each:

var classOne    = document.querySelector(".class1");
var classTwo    = document.querySelector(".class2");
var classThree  = document.querySelector(".class3");
var classFour   = document.querySelector(".class4");

but I'm also trying to do something like this:

var allClasses = [classOne, classTwo, classThree, classFour];

allClasses.classList.add("active");
allClasses.classList.remove("active");

Doesn't seem to be working though.

No jQuery please.

like image 423
user3143218 Avatar asked May 09 '14 13:05

user3143218


People also ask

How do you remove a specific class from all elements?

To remove all CSS classes of an element, we use removeClass() method. The removeClass() method is used to remove one or more class names from the selected element.

How do you add and remove a class?

How to use addClass() and removeClass() to remove one class name, and add a new class name. Using a function to remove a class from the selected elements.


2 Answers

Try this:

var classOne    = document.querySelector(".class1");
var classTwo    = document.querySelector(".class2");
var classThree  = document.querySelector(".class3");
var classFour   = document.querySelector(".class4");

var allClasses = [classOne, classTwo, classThree, classFour];

allClasses.forEach(function(el) {
  el.classList.add("active")
})
like image 174
bottens Avatar answered Oct 16 '22 23:10

bottens


Now this can be simplified to:

document.querySelectorAll('.class1, .class2, .class3, .class4').forEach(el => el.classList.add('active'))

If you need legacy browser support, use a regular function or transpile and include this polyfill:

if (window.NodeList && !NodeList.prototype.forEach) {
    NodeList.prototype.forEach = function (callback, thisArg) {
        thisArg = thisArg || window
        for (let i = 0; i < this.length; i++) {
            callback.call(thisArg, this[i], i, this)
        }
    }
}

If you use querySelectorAll a lot, you can bind it to a variable:

const $$ = document.querySelectorAll.bind(document)

$$('.class1, .class2, .class3, .class4').forEach(el => el.classList.add('active'))
like image 34
Fabian von Ellerts Avatar answered Oct 16 '22 22:10

Fabian von Ellerts