.toggleClass(className) adds a CSS class when it is missing and removes it when it is present (since jQuery 1.0). Optional state forces add/remove (1.3+); arrays work since 3.3.
Remember
$("div").toggleClass("highlight") // flip
$("div").toggleClass("highlight", true) // force on
$("div").toggleClass("a b") // each name flips
$("div").toggleClass(["a", "b"]) // array (3.3+)
// true → like .addClass()
// false → like .removeClass()
Select elements, pass class names, optionally force a boolean state.
Select the element(s) with a jQuery selector.
Call .toggleClass("name") — or a space-separated list / array.
Optional: pass true/false as the second argument to force on/off.
Chain freely — .toggleClass() returns the same jQuery object.
Piece
Required?
Role
className / array / function
Yes*
Class(es) to flip (*required in modern jQuery)
state
No
true add, false remove (strict boolean)
Return
—
Same jQuery collection (chainable)
Pseudocode
Pseudocode
function toggleClass(selection, names, state):
for each el in selection:
classes = resolve names (string | array | function)
for each class in classes:
if state is true:
add class
else if state is false:
remove class
else if el has class:
remove class
else:
add class
return selection
Class toggles are inexpensive. Prefer classes over frequent .css() writes when styles live in a stylesheet.
Remember
Key Takeaways
Role: flip a class on or off in one call.
State: pass true/false to force add or remove.
Multiple: space string or array — each name flips alone.
Modern: always pass class names — no-arg form is removed.
One line:.toggleClass("name") flips; .toggleClass("name", state) forces on or off.
Frequently Asked Questions
.toggleClass(className) adds a class when it is missing and removes it when it is present — flipping the class on or off in one call. It updates the class attribute so stylesheet rules apply or stop applying.
.addClass() always adds; .removeClass() always removes. .toggleClass() inspects each element and flips the class. Use it for click-to-highlight, open/close UI, and theme switches without tracking state yourself.
Since jQuery 1.3, .toggleClass(className, state) forces the result: true adds (like .addClass()), false removes (like .removeClass()). Handy when you already know the desired state, e.g. count % 3 === 0.
Yes. Pass a space-separated string or, since jQuery 3.3, an array. Each listed class is toggled independently on every matched element.
Since jQuery 1.4, pass a function that returns the class name(s) to toggle. jQuery calls it once per element with index, current className, and state. Since 3.3 it may return an array.
No. Calling .toggleClass() with only an optional boolean (toggling all classes) was deprecated in jQuery 3.0 and removed in 4.0. Always pass the class name(s) you mean to flip.