Самый простой способ переключить 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
каждый раз, когда вы переключаете оба, один уходит, а другой появляется.