Pessoalmente, eu apenas usaria o código JavaScript para alternar entre 2 classes.
Faça com que o CSS esboce tudo o que você precisa na sua div menos a regra de segundo plano e adicione duas classes (por exemplo: expandida e recolhida) como regras, cada uma com a imagem de segundo plano correta (ou a posição de segundo plano se estiver usando um sprite).
CSS com imagens diferentes
.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;}
Ou CSS com sprite de imagem
.div {
background: url(img/sprite.gif) no-repeat left top;
/* Other styles */
}
.expanded {background-position: left bottom;}
Então...
Código JavaScript com imagens
$(function){
$('#button').click(function(){
if($(this).hasClass('expanded'))
{
$(this).addClass('collapsed').removeClass('expanded');
}
else
{
$(this).addClass('expanded').removeClass('collapsed');
}
});
}
JavaScript com sprite
Nota: o toggleClass elegante não funciona no Internet Explorer 6, mas o método abaixo addClass
/ removeClass
também funcionará bem nessa situação
A solução mais elegante (infelizmente não é compatível com o 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');
}
});
}
Até onde eu sei, esse método funcionará nos navegadores, e eu me sentiria muito mais confortável jogando com CSS e classes do que com alterações de URL no script.