Ver Mensaje Individual
  #6 (permalink)  
Antiguo 01/12/2016, 11:02
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Ocultar varias div

Puedes asignar una clase al elemento que se haga visible en el momento en el que pulses un botón; previamente, buscas si hay algún elemento con dicha clase y, además de ocultarlo, le quitas la clase en cuestión.

Utilizando el ejemplo anterior y suponiendo que todos los paneles están ocultos desde un inicio:
Código Javascript:
Ver original
  1. $(".button").on("click", function(){
  2.     var posBut = $(".button").index(this),
  3.         panel = $(".panel").eq(posBut),
  4.         aux;
  5.    
  6.     if (aux = $(".visible")){ //Si hay un elemento con la clase "visible"
  7.         aux.removeClass("visible"); //Se la quito
  8.         aux.slideToggle(); //Y lo oculto
  9.     }
  10.    
  11.     if (aux[0] != panel[0]){ //Si el elemento equivalente al botón pulsado es diferente al que posee la clase "visible"
  12.         panel.addClass("visible"); //Le asigno dicha clase
  13.         panel.slideToggle(); //Y lo muestro
  14.     }
  15. });

Puedes ahorrar líneas usando la concatenación de métodos de jQuery:
Código Javascript:
Ver original
  1. $(".button").on("click", function(){
  2.     var posBut = $(".button").index(this),
  3.         panel = $(".panel").eq(posBut),
  4.         aux;
  5.    
  6.     if (aux = $(".visible")){
  7.         aux.removeClass("visible").slideToggle();
  8.     }
  9.    
  10.     if (aux[0] != panel[0]){
  11.         panel.addClass("visible").slideToggle();
  12.     }
  13. });

En la última condición, tomo a los elementos situados en la posición cero de cada selección puesto que jQuery asigna a los elementos en cuestión en dicha posición; mientras que en las otras se encuentran elementos como el contexto, selector, entre otros, impidiendo que se haga una comparación a nivel de elementos del DOM (no nos interesa el contexto ni los selectores utilizados).

DEMO

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 01/12/2016 a las 11:14 Razón: Demo