Cara termudah untuk beralih 2 kelas di jQuery

218

Jika saya memiliki kelas .A dan kelas .B dan ingin beralih di antara klik tombol, apa solusi yang bagus untuk itu di jQuery? Saya masih tidak mengerti cara toggleClass()kerjanya.

Apakah ada solusi sebaris untuk menjalankannya onclick=""?

Stewie Griffin
sumber
5
Inline JS ( onclick="") buruk. mengapa Anda tidak menggunakan jQuery untuk mendaftarkan event handler yang tepat (atau acara delegasi / siaran langsung jika Anda memiliki banyak elemen dengan handler yang sama)
ThiefMaster

Jawaban:

511

Jika elemen Anda mengekspos kelas Adari awal, Anda dapat menulis:

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

Ini akan menghapus kelas Adan menambah kelas B. Jika Anda melakukannya lagi, itu akan menghapus kelas Bdan mengembalikan kelas A.

Jika Anda ingin mencocokkan elemen yang mengekspos salah satu kelas, Anda dapat menggunakan pemilih beberapa kelas dan menulis:

$(".A, .B").toggleClass("A B");
Frédéric Hamidi
sumber
3
bagaimana jika alih-alih elemen saya ingin menempatkan kelas A atau B tergantung pada negara?
Stewie Griffin
1
Ketahuilah bahwa Anda harus men-cache objek yang Anda coba toggle daripada memilih elemen setiap kali, penggunaan yang paling umum untuk toggling kelas berada di penangan klik. var $trigger = $(".A"); $trigger.on("click", function() {$trigger.toggleClass("A B")});
mummybot
1
@mummybot - ditandai sebagai merendahkan. Frédéric - bagaimana jika elemen tidak memiliki kelas "dari awal"? itu adalah kondisi penting juga.
vsync
3
Ini tidak berfungsi lagi. Sekarang tambahkan dan hapus kedua kelas secara bersamaan.
Fabián
1
@ FrédéricHamidi Saya tidak tahu apa yang saya lakukan salah tetapi tidak berhasil ketika saya mencoba. Sekarang sepertinya baik-baik saja. Dalam kasus saya, ini menambah dan menghapus kedua kelas pada saat yang sama tetapi tampaknya berfungsi sekarang. Mungkin saya mengacaukan sesuatu yang lain dan itu mempengaruhi fungsi ini. Saya menghapus komentar saya. Maaf bila membingungkan.
BurakUeda
40

Ini adalah versi yang disederhanakan: ( meskipun tidak elegan, tetapi mudah diikuti )

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

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

});

Atau, solusi serupa:

$('#yourbutton').click(function()
{
     $('#target').toggleClass('a b'); //Adds 'a', removes 'b' and vice versa
});
Rion Williams
sumber
3
Saya togglepercaya cara penggunaan ini dibatasi dalam jquery 2.0
vittore
3
Terima kasih vittore. Ini jelas merupakan jawaban yang lebih tua dari tahun 2011. Saya telah memperbarui sintaks yang sesuai.
Rion Williams
4

Saya telah membuat plugin jQuery untuk bekerja KERING:

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

Anda bisa mencobanya di sini, salin dan jalankan ini di konsol lalu coba:

$('body').toggle2classes('a', 'b');
vsync
sumber
2

Anda onClickpermintaan:

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

Cobalah: https://jsfiddle.net/v15q6b5y/


Hanya JS à la jQuery :

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

Berikut cara 'non-konvensional' lainnya.

  • Ini menyiratkan penggunaan garis bawah atau lodash .
  • Ini mengasumsikan konteks di mana Anda:
    • elemen tidak memiliki kelas init (itu berarti Anda tidak dapat melakukan toggleClass ('a b'))
    • Anda harus mendapatkan kelas secara dinamis dari suatu tempat

Contoh skenario ini bisa berupa tombol yang memiliki kelas untuk diaktifkan pada elemen lain (misalnya tab dalam wadah).

// 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);
Luca Reghellin
sumber
-1

Solusi termudah adalah untuk toggleClass()kedua kelas secara individual.

Katakanlah Anda memiliki ikon:

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

Untuk beralih di antara fa-angle-downdan fa-angle-uplakukan hal berikut:

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

Karena kami memiliki fa-angle-downdi awal tanpa fa-angle-upsetiap kali Anda beralih keduanya, satu meninggalkan yang lain muncul.

Pemenang
sumber
-1

Beralih antara dua kelas 'A' dan 'B' dengan Jquery.

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

Cinta Kumar
sumber