jQueryで2つのクラスを切り替える最も簡単な方法


218

クラス.Aとクラス.Bがあり、ボタンクリックで切り替えたい場合、jQueryでそれを解決するにはどうすればよいですか?どのようにtoggleClass()機能するのか、まだわかりません。

onclick=""イベントで使用するインラインソリューションはありますか?


5
インラインJS(onclick="")は不良です。jQueryを使用して適切なイベントハンドラー(または同じハンドラーを持つ要素が多数ある場合はデリゲート/ライブイベント)を登録しないのはなぜ
ですか

回答:


511

要素Aが最初からクラスを公開している場合は、次のように記述できます。

$(element).toggleClass("A B");

これにより、クラスが削除され、クラスがA追加されBます。これをもう一度行うと、クラスが削除され、クラスがB復元されAます。

いずれかのクラスを公開する要素を一致させる場合は、複数の クラスセレクターを使用して次のように記述できます。

$(".A, .B").toggleClass("A B");

3
状態に応じて、要素の代わりにクラスAまたはBを配置する場合はどうなりますか?
Stewie Griffin

1
要素を毎回選択するのではなく、トグルしようとしているオブジェクトをキャッシュする必要があることに注意してください。クラスをトグルする最も一般的な使用法は、クリックハンドラー内にあります。var $trigger = $(".A"); $trigger.on("click", function() {$trigger.toggleClass("A B")});
mummybot 2015年

1
@mummybot-降順としてフラグが立てられます。フレデリック-要素に「最初から」クラスがない場合はどうなりますか?それも重要な状態です。
vsync

3
これはもう機能しません。ここで、両方のクラスを同時に追加および削除します。
ファビアン

1
@FrédéricHamidi何を間違えたかわからないが、試してもうまくいかなかった。今では元気です。私の場合、両方のクラスを同時に追加および削除しましたが、現在は機能しているようです。おそらく私は何か他のものを台無しにして、それがこの機能に影響を与えました。コメントを削除しました。混乱させて申し訳ありません。
BurakUeda

40

ここでは簡略化されたバージョンは、次のとおりですとはいえ、エレガントな、しかし簡単に従いません

$("#yourButton").toggle(function() 
{
        $('#target').removeClass("a").addClass("b"); //Adds 'a', removes 'b'

}, function() {
        $('#target').removeClass("b").addClass("a"); //Adds 'b', removes 'a'

});

または、同様のソリューション:

$('#yourbutton').click(function()
{
     $('#target').toggleClass('a b'); //Adds 'a', removes 'b' and vice versa
});

3
この使用方法はtogglejquery 2.0で低価格化されていると信じています
vittore

3
vittoreに感謝します。それは明らかに2011年からの古い回答です。それに応じて構文を更新しました。
リオンウィリアムズ

4

DRYを動作させるためのjQueryプラグインを作成しました。

$.fn.toggle2classes = function(class1, class2){
  if( !class1 || !class2 )
    return this;

  return this.each(function(){
    var $elm = $(this);

    if( $elm.hasClass(class1) || $elm.hasClass(class2) )
      $elm.toggleClass(class1 +' '+ class2);

    else
      $elm.addClass(class1);
  });
};

ここで試して、コンソールでこれをコピーして実行してから、試してください。

$('body').toggle2classes('a', 'b');

2

あなたのonClickリクエスト:

<span class="A" onclick="var state = this.className.indexOf('A') > -1; $(this).toggleClass('A', !state).toggleClass('B', state);">Click Me</span>

試してみてください:https : //jsfiddle.net/v15q6b5y/


ただ、JS ラjQueryのà

$('.selector').toggleClass('A', !state).toggleClass('B', state);

1

ここに別の「非従来型」の方法があります。

  • これは、アンダースコアまたはロダッシュの使用を意味します。
  • 次のような状況を想定しています。
    • 要素に初期化クラスがない(つまり、toggleClass( 'a b')を実行できない)
    • あなたはどこかから動的にクラスを取得する必要があります

このシナリオの例としては、クラスが別の要素(コンテナー内のタブなど)で切り替えられるボタンが考えられます。

// 1: define the array of switching classes:
var types = ['web','email'];

// 2: get the active class:
var type = $(mybutton).prop('class');

// 3: switch the class with the other on (say..) the container. You can guess the other by using _.without() on the array:
$mycontainer.removeClass(_.without(types, type)[0]).addClass(type);

-1

最も簡単な解決策は、toggleClass()両方のクラスを個別に行うことです。

アイコンがあるとしましょう:

    <i id="target" class="fa fa-angle-down"></i>

切り替えるには、次の操作fa-angle-downfa-angle-up行います。

    $('.sometrigger').click(function(){
        $('#target').toggleClass('fa-angle-down');
        $('#target').toggleClass('fa-angle-up');
    });

fa-angle-down最初はfa-angle-up両方をトグルする必要がなかったので、片方はもう片方が表示されます。


-1

Jqueryで2つのクラス「A」と「B」を切り替えます。

$( '#selecor_id')。toggleClass( "A B");

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.