jQueryのクラス操作は最も頻繁に使う機能の一つです。addClass()・removeClass()・toggleClass()・hasClass()の4つを使いこなすことで、アニメーション・UI状態管理・スタイル切り替えを効率的に実装できます。
この記事でわかること
- addClass()でクラスを追加する方法
- removeClass()でクラスを削除する方法
- toggleClass()でクラスを切り替える方法
- hasClass()でクラスの有無を確認する方法
- 複数クラスの同時操作・条件付き操作のパターン
1. addClass():クラスを追加する
// 1つのクラスを追加
$('#box').addClass('active');
// 複数のクラスを一度に追加(スペース区切り)
$('#box').addClass('active highlight bold');
// 全要素にクラスを追加
$('.list-item').addClass('selected');
// 条件によってクラスを追加
if (score >= 80) {
$('#result').addClass('pass');
}
2. removeClass():クラスを削除する
// 1つのクラスを削除
$('#box').removeClass('active');
// 複数のクラスを一度に削除
$('#box').removeClass('active highlight');
// 引数なしで全クラスを削除(クラス属性自体を空にする)
$('#box').removeClass();
// 兄弟要素のクラスを外してから自分に付ける(排他的アクティブ)
$('.tab').on('click', function () {
$('.tab').removeClass('active'); // 全タブから削除
$(this).addClass('active'); // クリックしたタブに追加
});
3. toggleClass():クラスを切り替える
toggleClass() はクラスが存在すれば削除、なければ追加する切り替えを一発で行います。
// クラスの有無を切り替える
$('#menu-btn').on('click', function () {
$('#nav-menu').toggleClass('is-open');
});
// 第2引数にboolean値を渡して強制的に追加/削除
var isLoggedIn = true;
$('#user-badge').toggleClass('logged-in', isLoggedIn); // trueなら追加、falseなら削除
// 複数クラスの同時切り替え
$('#box').toggleClass('open active'); // 2つのクラスを同時に切り替え
4. hasClass():クラスの有無を確認する
// クラスが存在するか確認
if ($('#box').hasClass('active')) {
console.log('activeクラスがある');
}
// 複数要素のうち1つでも指定クラスを持つか確認
if ($('.item').hasClass('selected')) {
console.log('選択済みの要素が存在する');
}
// toggleClass()の代替(hasClassで分岐)
$('#btn').on('click', function () {
if ($(this).hasClass('active')) {
$(this).removeClass('active').text('有効にする');
} else {
$(this).addClass('active').text('無効にする');
}
});
5. 実用パターン:CSSアニメーションとクラス操作の連携
jQueryでクラスを付け替えて、スタイルの変化はCSSアニメーションに任せると効率的です。
.panel {
transition: opacity 0.3s, transform 0.3s;
opacity: 0;
transform: translateY(-10px);
}
.panel.is-visible {
opacity: 1;
transform: translateY(0);
}
// クラスを付け替えるだけでアニメーションが動く
$('#show-btn').on('click', function () {
$('#panel').toggleClass('is-visible');
});
// スクロールに合わせて要素を表示(IntersectionObserverの代替)
$(window).on('scroll', function () {
var scrollTop = $(this).scrollTop();
var windowHeight = $(this).height();
$('.animate-on-scroll').each(function () {
if ($(this).offset().top < scrollTop + windowHeight * 0.9) {
$(this).addClass('is-visible');
}
});
});
クラス操作 vs スタイル直接変更
$(el).css("color", "#f00") でスタイルを直接変更するよりも、$(el).addClass("is-error") でクラスを付け替える方がベストプラクティスです。CSSファイルでスタイルを管理できるため、保守性・再利用性が格段に高まります。まとめ
| メソッド | 動作 | 典型的な用途 |
|---|---|---|
| addClass() | クラスを追加 | エラー状態・アクティブ状態の付与 |
| removeClass() | クラスを削除 | タブ切り替え・状態リセット |
| toggleClass() | クラスを切り替え | メニュー開閉・トグルボタン |
| hasClass() | クラスの有無を確認 | 条件分岐・状態チェック |
関連記事: jQueryアコーディオンの実装完全ガイド / jQueryのアニメーション完全ガイド
よくある質問(FAQ)
QaddClass()と.css()はどちらを使うべき?
A基本的には
addClass() でクラスを付け替えてスタイルはCSSで管理するのが推奨です。.css() はインラインスタイルを書き換えるため、CSSとの管理が分散して保守が難しくなります。QtoggleClass()を使うと毎回クリックで状態が変わりますが、強制的に追加/削除するには?
A
toggleClass("active", true) で強制追加、toggleClass("active", false) で強制削除できます。第2引数にbooleanを渡すことで条件付きの操作が可能です。Q複数のクラスを一度に操作するには?
A
addClass("class1 class2") のようにスペース区切りで複数クラスを指定できます。removeClass・toggleClassも同様に複数クラスをスペース区切りで指定できます。Q要素の全クラスを取得するには?
A
$(el).attr("class") でスペース区切りのクラス文字列を取得できます。配列で取得したい場合は $(el).attr("class").split(" ") で分割します。Qクラスが変わるタイミングに合わせて処理を実行するには?
AjQueryにはクラス変更のイベントはありません。クラスを変更する処理(clickイベントなど)の中で一緒に追加の処理を書くか、MutationObserverを使ってクラス属性の変化を監視します。