Personalmente, solo usaría el código JavaScript para cambiar entre 2 clases.
Haga que el CSS describa todo lo que necesita en su div MENOS la regla de fondo, luego agregue dos clases (por ejemplo: expandido y contraído) como reglas, cada una con la imagen de fondo correcta (o la posición de fondo si usa un sprite).
CSS con diferentes imágenes
.div {
/* button size etc properties */
}
.expanded {background: url(img/x.gif) no-repeat left top;}
.collapsed {background: url(img/y.gif) no-repeat left top;}
O CSS con sprite de imagen
.div {
background: url(img/sprite.gif) no-repeat left top;
/* Other styles */
}
.expanded {background-position: left bottom;}
Luego...
Código JavaScript con imágenes
$(function){
$('#button').click(function(){
if($(this).hasClass('expanded'))
{
$(this).addClass('collapsed').removeClass('expanded');
}
else
{
$(this).addClass('expanded').removeClass('collapsed');
}
});
}
JavaScript con sprite
Nota: el elegante toggleClass no funciona en Internet Explorer 6, pero el método addClass
/ siguiente removeClass
también funcionará bien en esta situación
La solución más elegante (desafortunadamente no es compatible con Internet Explorer 6)
$(function){
$('#button').click(function(){
$(this).toggleClass('expanded');
});
}
$(function){
$('#button').click(function(){
if($(this).hasClass('expanded'))
{
$(this).removeClass('expanded');
}
else
{
$(this).addClass('expanded');
}
});
}
Hasta donde sé, este método funcionará en todos los navegadores, y me sentiría mucho más cómodo jugando con CSS y clases que con los cambios de URL en el script.