Skip to main content
← ⚑ JavaScript & the browserΒ·Module C2 Β· Lesson 4
TaskHTML has <button id='b'>toggle</button> and <div id='card' class='card'>Hello</div>. CSS makes .card { padding: 12px } and .card.active { background: gold }. JS: clicking the button toggles 'active' on #card.

classList: toggle classes the modern way

75 XP6 min
Theory

classList β€” the cleanest DOM API in the standard library

el.classList.add("active");
el.classList.remove("active");
el.classList.toggle("active");        // adds if missing, removes if present β€” returns new state
el.classList.contains("active");      // β†’ true / false
el.classList.replace("old", "new");

Every method takes one or more class names. toggle accepts a force boolean too: toggle("active", isOn).

Why classList beats element.className

el.className = "card active";                 // wipes everything else
el.className += " active";                    // string-concat, easy to typo a missing space
el.classList.add("active");                   // surgical, idempotent

className is a string. Mutating it is fragile. classList knows it's a list and acts accordingly.

Combine with CSS for the visual state

A typical pattern:

.dialog        { display: none; }
.dialog.open   { display: block; }
dialog.classList.toggle("open");

State lives in one place: the class. CSS handles the visuals. JS handles the toggle. Each layer does what it's best at.

πŸ”’

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β€” card required, cancel anytime.

Sign up β€” free trial β†’

First 10 lessons in each track are free. No card needed for those.

← PreviousNext lesson β†’

Get one Python or web tip a day β€” by email

Short, hand-written, no spam. Unsubscribe in one click.