How to Change an Element's Class in JavaScript: From Beginner to Pro in 2025
Have you ever wanted a button on a website to change color on click, or a menu to slide out smoothly? It's all the magic of changing classes. The question “How can I change an element's class with JavaScript?” is one of the most popular on Stack Overflow (tens of thousands of views). And for good reason: without this skill, modern web development is hard to imagine.
In 2025, browsers have become even smarter, but the basic tool remains the same — classList. In this article, we'll break down all the ways to change an element's class in JavaScript: from classics to modern techniques. You'll learn how to avoid common pitfalls and write code you won't be ashamed to show in an interview.
Why is Changing a Class Important?
Imagine you're building a house out of blocks. Each block is an HTML element, and classes are stickers that say: “I'm red”, “I'm animated”, “I'm hidden”. When a user clicks a button, you simply change the sticker — and the element comes to life. Without changing classes, you'd have to redraw the entire interface, which is slow and sad.
In 2025, changing an element's class in JavaScript is a basic operation used in 9 out of 10 interactive websites. From modal windows to dark mode — everything relies on classes.
Vanilla JavaScript: classList — Your Main Tool
If you're still using className and string concatenation — stop. In 2025, there's classList. It's a built-in API that works in all modern browsers (yes, even Safari).
Here's what it looks like:
// Get the elementconst button = document.querySelector('.my-button');
// Add a classbutton.classList.add('active');
// Remove a classbutton.classList.remove('active');
// Toggle a classbutton.classList.toggle('active');
// Check if a class existsif (button.classList.contains('active')) { console.log('Button is active!');}This code is the foundation everyone should know. But there are nuances that turn good code into great code.
Multiple Classes: Adding and Removing at Once
Want to add multiple classes at the same time? Easy:
element.classList.add('visible', 'animated', 'highlight');Same with removal:
element.classList.remove('hidden', 'fade-out');This even works in Internet Explorer 11 (if you happen to support ancient browsers). In 2025, this is the standard.
Replacing a Class: Swapping One for Another
Sometimes you need to replace one class with another. For example, switching an icon from “sun” to “moon”. There's a method for that: replace
element.classList.replace('icon-sun', 'icon-moon');If the icon-sun class doesn't exist — nothing happens, no error. It's safe and readable.
Conditional Toggling: toggle with a Boolean Flag
The toggle method can take a second argument — a boolean value. If true — the class is added, if false — it's removed. This is convenient when you want to sync a class with a state:
const isDarkMode = true;element.classList.toggle('dark', isDarkMode); // adds 'dark'
const isLoggedIn = false;element.classList.toggle('logged-in', isLoggedIn); // removes 'logged-in'This is much cleaner than writing an if-else.
What about className? When is it Needed?
Good old className is still alive, but its time has passed. It replaces all classes at once:
element.className = 'new-class another-class';The problem: if the element already had classes, they will be erased. In 2025, className is only used in two cases:
- When you need to completely