JQuery'de 2 sınıf arasında geçiş yapmanın en kolay yolu


218

Sınıf .A ve sınıf .B varsa ve düğme tıklatması arasında geçiş yapmak istiyorsanız, jQuery için güzel bir çözüm nedir? Hala nasıl toggleClass()çalıştığını anlamıyorum .

onclick=""Etkinliğe yerleştirmek için satır içi bir çözüm var mı ?


5
Satır içi JS ( onclick="") kötü. neden uygun bir olay işleyicisi (veya aynı işleyiciye sahip çok sayıda
öğeniz

Yanıtlar:


512

Öğeniz Abaşlangıçtan itibaren sınıfı gösterirse şunları yazabilirsiniz:

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

Bu, sınıfı kaldıracak Ave sınıf ekleyecektir B. Bunu tekrar yaparsanız, sınıfı kaldırır Bve sınıfı eski haline getirir A.

Sınıflardan herhangi birini ortaya çıkaran öğelerle eşleştirmek istiyorsanız, birden çok sınıf seçicisi kullanabilir ve şunu yazabilirsiniz:

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

3
Eleman yerine duruma göre A veya B sınıfını koymak istersem ne olur?
Stewie Griffin

1
Her seferinde geçiş yapmaya çalıştığınız nesneyi, her seferinde öğeleri seçmek yerine önbelleğe almanız gerektiğini unutmayın; bu, sınıfları bir tıklama işleyicisinde olmak için en yaygın kullanımdır. var $trigger = $(".A"); $trigger.on("click", function() {$trigger.toggleClass("A B")});
mummybot

1
@mummybot - küçümseyen olarak işaretlendi. Frédéric - Elemanın "başlangıçtan itibaren" herhangi bir sınıfı yoksa ne olur? bu da önemli bir durum.
vsync

3
Bu artık çalışmıyor. Şimdi her iki sınıfı da aynı anda ekler ve kaldırır.
Fabián

1
@ FrédéricHamidi Neyi yanlış yaptığımı bilmiyorum ama denediğimde işe yaramadı. Şimdi iyi görünüyor. Benim durumumda, her iki sınıfı da aynı anda ekledi ve kaldırdı, ancak şimdi çalışıyor gibi görünüyor. Muhtemelen başka bir şey batırdım ve bu işlevi etkiledi. Yorumumu sildim. Karışıklık için özür dilerim.
BurakUeda

40

İşte basitleştirilmiş bir sürüm: ( zarif olmasa da takip edilmesi kolay )

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

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

});

Alternatif olarak, benzer bir çözüm:

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

3
Bu kullanım şeklinin togglejquery 2.0'da
olduğuna

3
Teşekkürler vittore. Açıkçası 2011'den daha eski bir yanıt. Sözdizimini buna göre güncelledim.
Rion Williams

4

DRY çalışmak için bir jQuery eklentisi yaptım:

$.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);
  });
};

Burada deneyebilir, bunu konsolda kopyalayıp çalıştırabilir ve ardından şunları deneyebilirsiniz:

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

2

Sizin onClickistek:

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

Deneyin: https://jsfiddle.net/v15q6b5y/


Sadece JS à la jQuery :

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

1

İşte başka bir 'geleneksel olmayan' yol.

  • Alt çizgi veya lodash kullanımını ima eder .
  • Aşağıdaki durumlarda bir bağlam varsayar:
    • öğenin bir init sınıfı yok (yani toggleClass ('a b') yapamazsınız)
    • sınıfı dinamik olarak bir yerden almak zorundasın

Bu senaryonun bir örneği, sınıfı başka bir öğeye (bir kaptaki sekmeleri söyleyin) açacak düğmeler olabilir.

// 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

En kolay çözüm toggleClass()her iki sınıfa da bireysel olarak.

Diyelim ki bir simgeniz var:

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

Arasında geçiş yapmak fa-angle-downve fa-angle-upaşağıdakileri yapın:

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

Biz bu yana fa-angle-downolmadan başında fa-angle-uphem arasında her geçiş, diğeri için bir yaprak görünmesi.


-1

Jquery ile iki 'A' ve 'B' sınıfı arasında geçiş yapın.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.