Самый простой способ переключить 2 класса в jQuery

Если у меня есть класс .A и класс .B и вы хотите переключиться между нажатием кнопки, какое хорошее решение для этого в jQuery? Я все еще не понимаю, как работает toggleClass().

Есть ли встроенное решение, чтобы поместить его в событие onclick=""?

Ответ 1

Если ваш элемент предоставляет класс A с самого начала, вы можете написать:

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

Это приведет к удалению класса A и добавит класс B. Если вы снова это сделаете, он удалит класс B и восстановит класс A.

Если вы хотите сопоставить элементы, которые выставляют один из классов, вы можете использовать multiple селектор классов и напишите:

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

Ответ 2

Вот упрощенная версия: (хотя и не элегантная, но простая в использовании)

$("#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

Я создал плагин jQuery для работы DRY:

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

Ответ 4

Вот еще один "нетрадиционный" способ.

  • Это подразумевает использование underscore или lodash.
  • Он предполагает контекст, в котором вы:
    • у элемента нет класса init (это означает, что вы не можете выполнить 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);

Ответ 5

Ваш запрос 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 à la jQuery:

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

Ответ 6

Переключайтесь между двумя классами "A" и "B" с помощью Jquery.

$ ( '# Selecor_id') toggleClass ( "AB").

Ответ 7

Самым простым решением является toggleClass() обоих классов по отдельности.

Допустим, у вас есть значок:

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

Для переключения между fa-angle-down и fa-angle-up сделайте следующее:

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

Так как в начале у нас был fa-angle-down без fa-angle-up каждый раз, когда вы переключаете оба, один уходит, а другой появляется.