Foros del Web » Programando para Internet » Javascript »

¿Cómo ocultar y ver varios DIV al mismo tiempo?

Estas en el tema de ¿Cómo ocultar y ver varios DIV al mismo tiempo? en el foro de Javascript en Foros del Web. Saludos. Tengo una serie de <DIV> que quisiera ocultar y ver cuando haga clic a unos botones ya creados. Los div serían algo como esto: ...
  #1 (permalink)  
Antiguo 27/09/2009, 15:08
 
Fecha de Ingreso: mayo-2005
Mensajes: 55
Antigüedad: 19 años
Puntos: 1
Pregunta ¿Cómo ocultar y ver varios DIV al mismo tiempo?

Saludos.

Tengo una serie de <DIV> que quisiera ocultar y ver cuando haga clic a unos botones ya creados.

Los div serían algo como esto:

<div id="sitio" style="display:none">ubicacion</div>
<div id="sitio" style="display:none">ubicacion</div>
.
.
.
(varios más)

Las funciones que tengo son (están en <head>):

<script language="javascript" type="text/javascript">
<!--
function VerUbicaciones($lay){
document.getElementById($lay).style.display = 'block';
}
function OcultarUbicaciones($lay){
document.getElementById($lay).style.display = 'none';
}
// -->
</script>

Y los botones para ver u ocultar son:
[ <a href="javascript:VerUbicaciones('sitio');">ver ubicaciones</a> ]
[ <a href="javascript:OcultarUbicaciones('sitio');">ocu ltar ubicaciones</a> ]

Como verán, todos los div a ocultar o mostrar tienen el mismo id="sitio". Yo pensé que al llamar a la función ocultaría o mostraría todos al mismo tiempo y sucede que solo lo hace con el primero.

¿Pueden ayudarme con esto?

¡MUCHAS GRACIAS!
  #2 (permalink)  
Antiguo 27/09/2009, 15:21
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 1 mes
Puntos: 1485
Respuesta: ¿Cómo ocultar y ver varios DIV al mismo tiempo?

lo que pasa es que mas de un elemento no puede tener el mismo ID, por eso solo te funciona en el primero. claro, en tu caso seria irracional asignar un ID distinto a cada <div> porque habria que llamar multiples veces la funcion. lo que puedes hacer es asignarle una clase y tomar todos los elementos que tengan la misma clase. existe el metodo document.getElementsByClassName pero desafortunadamente no existe en iexplorer aunque es facil corregir este aspecto.
Código:
if(!document.getElementsByClassName){
document.getElementsByClassName = function(className){
var regex = new RegExp(className);
var array = [];
var element = arguments[1] || document.documentElement;
	for(var elem = element.firstChild; elem != null; elem = elem.nextSibling){
	if(elem.nodeType != 1)continue;
	if(regex.test(elem.className)) array.push(elem);
	if(elem.hasChildNodes()) array = array.concat(arguments.callee(className, elem));
	}
return array;
}}
lo que te queda por hacer es asignarle clases a los <div> y modificar la funcion para buscar los elementos por clases e iterar por todos los <div>.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 27/09/2009, 17:12
 
Fecha de Ingreso: mayo-2005
Mensajes: 55
Antigüedad: 19 años
Puntos: 1
Respuesta: ¿Cómo ocultar y ver varios DIV al mismo tiempo?

Gracias por la respuesta. Aún me resulta confusa la solución que planteas y, si no sirve para IE, creo que tampoco sería alternativa.

He modificado un código que encontré por allí a ver si de esta manera funciona pero tampoco. Aquí lo pongo a ver si ustedes se iluminan con esto:

function VerUbicaciones(){
var a = document.getElementsById($lay);
for(var i = 0;i < a.length;i++){
document.getElementById(a[i]).style.display = 'block';
}
}

¿Podrá ese código funcionar con las correcciones que se le puedan hacer?
  #4 (permalink)  
Antiguo 27/09/2009, 17:19
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 6 meses
Puntos: 56
Respuesta: ¿Cómo ocultar y ver varios DIV al mismo tiempo?

Pues haz algo simple, podrías colocar todos los divs en uno solo con el id sitios
Código javascript:
Ver original
  1. function mostrarOcultar(id,no){
  2.     var obj = document.getElementById(id).getElementsByTagName("div"), n = "none", i;
  3.     for( i=0; i < obj.length; i++){
  4.         if(obj[i].className != no){
  5.         var dis = obj[i].style;
  6.         dis.display = dis.display == n ? "block" : n;
  7.         }
  8.     }
  9. }

Código HTML:
<p><a href="javascript:mostrarOcultar('sitios','no')">ver ubicaciones</a></p>
<div id="sitios">
<div>Sitio 1</div>
<div class="no">Sitio 2</div>
<div>Sitio 3</div>
<div>Sitio 4</div>
</div> 
Los divs que tienen la clase "no" no se ocultarán.
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #5 (permalink)  
Antiguo 27/09/2009, 17:44
 
Fecha de Ingreso: mayo-2005
Mensajes: 55
Antigüedad: 19 años
Puntos: 1
Respuesta: ¿Cómo ocultar y ver varios DIV al mismo tiempo?

MUCHAS GRACIAS AMERICA | UNK !!!

¡Funcionó de maravillas!

Gracias de nuevo.
  #6 (permalink)  
Antiguo 27/09/2009, 17:55
 
Fecha de Ingreso: mayo-2005
Mensajes: 55
Antigüedad: 19 años
Puntos: 1
Respuesta: ¿Cómo ocultar y ver varios DIV al mismo tiempo?

Ah! una pregunta importante!!!

¿Y si el DIV que NO quiero ocultar tiene una clase asignada y además tiene un id único?, no le puedo poner el class="no" :S
  #7 (permalink)  
Antiguo 28/09/2009, 09:47
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 6 meses
Puntos: 56
Respuesta: ¿Cómo ocultar y ver varios DIV al mismo tiempo?

Código javascript:
Ver original
  1. function mostrarOcultar(id,exc){
  2.     var obj = document.getElementById(id).getElementsByTagName("div"),
  3.     n = "none", i, d, s = "(\\s|", r = new RegExp(s+"^)"+exc+s+"$)");
  4.     for( i=0; i < obj.length; i++){
  5.         if(!r.test(obj[i].className)){
  6.             d = obj[i].style;
  7.             d.display = d.display == n ? "block" : n;
  8.         }
  9.     }
  10. }


Código HTML:
<p><a href="javascript:mostrarOcultar('sitios','no')">ver ubicaciones</a></p>
<div id="sitios">
<div>Sitio 1</div>
<div class="estilo1 no">Sitio 2</div>
<div>Sitio 3</div>
<div class="reno">Sitio 4</div>
</div> 
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:28.