Se ho una classe .A e una classe .B e voglio passare da un pulsante all'altro, qual è una buona soluzione in jQuery? Ancora non capisco come toggleClass()
funziona.
Esiste una soluzione in linea per metterlo in atto onclick=""
?
Se ho una classe .A e una classe .B e voglio passare da un pulsante all'altro, qual è una buona soluzione in jQuery? Ancora non capisco come toggleClass()
funziona.
Esiste una soluzione in linea per metterlo in atto onclick=""
?
Risposte:
Se il tuo elemento espone la classe A
dall'inizio, puoi scrivere:
$(element).toggleClass("A B");
Ciò rimuoverà la classe A
e aggiungerà la classe B
. Se lo fai di nuovo, rimuoverà la classe B
e ripristinerà la classe A
.
Se si desidera abbinare gli elementi che espongono entrambe le classi, è possibile utilizzare un selettore di più classi e scrivere:
$(".A, .B").toggleClass("A B");
var $trigger = $(".A"); $trigger.on("click", function() {$trigger.toggleClass("A B")});
Ecco una versione semplificata: ( anche se non elegante, ma facile da seguire )
$("#yourButton").toggle(function()
{
$('#target').removeClass("a").addClass("b"); //Adds 'a', removes 'b'
}, function() {
$('#target').removeClass("b").addClass("a"); //Adds 'b', removes 'a'
});
In alternativa, una soluzione simile:
$('#yourbutton').click(function()
{
$('#target').toggleClass('a b'); //Adds 'a', removes 'b' and vice versa
});
toggle
sia deprecato in jquery 2.0
Ho creato un plugin jQuery per lavorare a SECCO:
$.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);
});
};
Puoi semplicemente provarlo qui, copiarlo ed eseguirlo nella console e quindi provare:
$('body').toggle2classes('a', 'b');
La tua onClick
richiesta:
<span class="A" onclick="var state = this.className.indexOf('A') > -1; $(this).toggleClass('A', !state).toggleClass('B', state);">Click Me</span>
Provalo: https://jsfiddle.net/v15q6b5y/
Solo il JS à la jQuery :
$('.selector').toggleClass('A', !state).toggleClass('B', state);
Ecco un altro modo "non convenzionale".
Un esempio di questo scenario potrebbe essere rappresentato dai pulsanti con la classe da attivare su un altro elemento (ad esempio le schede in un contenitore).
// 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);
La soluzione più semplice è per toggleClass()
entrambe le classi individualmente.
Diciamo che hai un'icona:
<i id="target" class="fa fa-angle-down"></i>
Per passare da una all'altra fa-angle-down
e fa-angle-up
procedere come segue:
$('.sometrigger').click(function(){
$('#target').toggleClass('fa-angle-down');
$('#target').toggleClass('fa-angle-up');
});
Dal momento che abbiamo avuto fa-angle-down
all'inizio senza fa-angle-up
ogni volta che si attivano entrambi, uno parte per l'altro apparire.
Passa tra due classi 'A' e 'B' con Jquery.
$ ('# selecor_id'). toggleClass ("A B");
onclick=""
) è male. perché non usi jQuery per registrare un gestore di eventi adeguato (o un evento delegato / live se hai molti elementi con lo stesso gestore)