Jeśli mam klasę .A i klasę .B i chcę przełączać się między kliknięciem przycisku, jakie jest dobre rozwiązanie w jQuery? Nadal nie rozumiem, jak to toggleClass()
działa.
Czy istnieje jakieś rozwiązanie na miejscu, aby to zrobić onclick=""
?
Jeśli mam klasę .A i klasę .B i chcę przełączać się między kliknięciem przycisku, jakie jest dobre rozwiązanie w jQuery? Nadal nie rozumiem, jak to toggleClass()
działa.
Czy istnieje jakieś rozwiązanie na miejscu, aby to zrobić onclick=""
?
Odpowiedzi:
Jeśli twój element odsłania klasę A
od samego początku, możesz napisać:
$(element).toggleClass("A B");
Spowoduje to usunięcie klasy A
i dodanie klasy B
. Jeśli zrobisz to ponownie, usunie klasę B
i przywróci klasę A
.
Jeśli chcesz dopasować elementy eksponujące dowolną klasę, możesz użyć selektora wielu klas i napisać:
$(".A, .B").toggleClass("A B");
var $trigger = $(".A"); $trigger.on("click", function() {$trigger.toggleClass("A B")});
Oto uproszczona wersja: ( choć nie elegancka, ale łatwa do naśladowania )
$("#yourButton").toggle(function()
{
$('#target').removeClass("a").addClass("b"); //Adds 'a', removes 'b'
}, function() {
$('#target').removeClass("b").addClass("a"); //Adds 'b', removes 'a'
});
Alternatywnie podobne rozwiązanie:
$('#yourbutton').click(function()
{
$('#target').toggleClass('a b'); //Adds 'a', removes 'b' and vice versa
});
toggle
jest utrudniony w jquery 2.0
Zrobiłem wtyczkę jQuery do pracy 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);
});
};
Możesz po prostu spróbować tutaj, skopiować i uruchomić to w konsoli, a następnie spróbować:
$('body').toggle2classes('a', 'b');
Twoja onClick
prośba:
<span class="A" onclick="var state = this.className.indexOf('A') > -1; $(this).toggleClass('A', !state).toggleClass('B', state);">Click Me</span>
Wypróbuj: https://jsfiddle.net/v15q6b5y/
Tylko JS à la jQuery :
$('.selector').toggleClass('A', !state).toggleClass('B', state);
Oto inny „niekonwencjonalny” sposób.
Przykładem tego scenariusza mogą być przyciski, w których klasę można włączyć na innym elemencie (np. Tabulatory w kontenerze).
// 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);
Najłatwiejszym rozwiązaniem jest dla toggleClass()
obu klas indywidualnie.
Powiedzmy, że masz ikonę:
<i id="target" class="fa fa-angle-down"></i>
Aby przełączyć między fa-angle-down
i fa-angle-up
wykonaj następujące czynności:
$('.sometrigger').click(function(){
$('#target').toggleClass('fa-angle-down');
$('#target').toggleClass('fa-angle-up');
});
Ponieważ mieliśmy fa-angle-down
na początku, bez fa-angle-up
każdorazowego przełączania obu, jedno wychodzi, aby drugie się pojawiło.
Przełączaj się między dwiema klasami „A” i „B” za pomocą Jquery.
$ ('# selecor_id'). toggleClass („A B”);
onclick=""
) jest zła. dlaczego nie użyjesz jQuery do zarejestrowania odpowiedniego modułu obsługi zdarzeń (lub wydarzenia delegowanego / na żywo, jeśli masz wiele elementów z tym samym