2011-02-18 15 views
17

tiene problemas para obtener el código siguiente para trabajar:conmutación entre dos clases diferentes de jQuery

$('#changeMode').button().click(function(){ 
    $('#playfield').toggle(function() { 
     $(this).switchClass("gridView","plainView"); 
    }, function() { 
     $(this).switchClass("plainView","gridView"); 
    });  
}); 

no puede conseguirlo a cambio de clase de la siguiente div.

<div id="playfield" class="gridView"></div> 

¿Alguna idea?

EDIT: He intentado esto:

$('#changeMode').button().click(function(){ 
    if ($('#playfield').attr('class') == "gridView"){ 
     $('#playfield').removeClass("gridView"); 
     $('#playfield').addClass("plainView"); 
    } else { 
     $('#playfield').removeClass("plainView"); 
     $('#playfield').addClass("gridView"); 
    } 
}); 

Y parece que funciona bien, ¿qué diablos?

+1

'.switchClass()' no es un método jQuery. ¿Estás buscando ['.toggleClass()'] (http://api.jquery.com/toggleClass)? –

+1

[.switchClass()] (http://docs.jquery.com/UI/Effects/switchClass) – Yottagray

+1

para que switchClass funcione, necesita cargar jqueryUI. – HPWD

Respuesta

35

No tenía conocimiento de un SwitchClass, ¿quizás estabas pensando en toggleClass? De todos modos - que tenía algo de código antiguo que utiliza este (que estaba teniendo algunos problemas extraños con toggleClass):

$(this).removeClass("gridView").addClass("plainView"); 

or 

$(this).toggleClass("gridView plainView"); 

y viceversa.

Ejemplo:

$('#changeMode').button().click(function(){ 
    $('#playfield').toggle(function() { 
     $(this).toggleClass("gridView plainView"); 
     //$(this).removeClass("gridView").addClass("plainView"); 
    }, function() { 
     $(this).toggleClass("plainView gridView"); 
     //$(this).removeClass("plainView").addClass("gridView"); 
    });  
}); 

Pero, como otros han sugerido toggleClass debe trabajar para sus necesidades.

+1

switchClass es una función jQuery UI. Intenté alternar Class como muestra arriba, así como el método más difícil que muestra en sus comentarios, pero no tiene ningún efecto. – Yottagray

+2

plainView/gridView no parece estar bien en sintaxis: http://api.jquery.com/toggleClass/ – Jeffz

+0

La sintaxis de las respuestas se actualizó de acuerdo con [jQuery API] (http://api.jquery.com/toggleClass/# toggleClass-className). Gracias a @Guy. – jibiel

2

jQuery también tiene una API toggleClass:

http://api.jquery.com/toggleClass/

Esto funciona igual que lo que sugirió Rionmonster, la adición de clases cuando no se fijan en la clase y la eliminación de ellos cuando ya están establecidos.

5

La sintaxis correcta es utilizar "uno o más nombres de clase (separados por espacios) .." (de .toggleClass()) dentro del primer parámetro, en lugar de citar nombres de las clases en el primer y segundo parámetro.

p. Ej.

$(this).toggleClass("gridView plainView"); 
2

simplemente use el toggleClass dos veces hará la magia. toggoleClass refference a Jquery
This method takes one or more class names as its parameter. In the first version, if an element in the matched set of elements already has the class, then it is removed; if an element does not have the class, then it is added.

como para su problema.

$('#changeMode').button().click(function(){ $(this).toggleClass('gridView').toggleClass('plainView'); });

ayuda esto va a resolver ur problema.

@Guy toggleClass('gridView plainView') esto va a ser suplentes bettween
<div class="gridView plainView"> and <div class=" ">. y no alternar los dos bettween classe. sin ofender . Espero que esto ayude.

Cuestiones relacionadas