【jQuery】classの追加・削除・切り替えを完全解説|addClass/removeClass/toggleClass/hasClass

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()を使うと毎回クリックで状態が変わりますが、強制的に追加/削除するには?
AtoggleClass("active", true) で強制追加、toggleClass("active", false) で強制削除できます。第2引数にbooleanを渡すことで条件付きの操作が可能です。
Q複数のクラスを一度に操作するには?
AaddClass("class1 class2") のようにスペース区切りで複数クラスを指定できます。removeClass・toggleClassも同様に複数クラスをスペース区切りで指定できます。
Q要素の全クラスを取得するには?
A$(el).attr("class") でスペース区切りのクラス文字列を取得できます。配列で取得したい場合は $(el).attr("class").split(" ") で分割します。
Qクラスが変わるタイミングに合わせて処理を実行するには?
AjQueryにはクラス変更のイベントはありません。クラスを変更する処理(clickイベントなど)の中で一緒に追加の処理を書くか、MutationObserverを使ってクラス属性の変化を監視します。