Foros del Web » Programando para Internet » Jquery »

Mostrar/ocultar con each() de jquery

Estas en el tema de Mostrar/ocultar con each() de jquery en el foro de Jquery en Foros del Web. Buenas a todos, a ver si me podéis ayudar con este problema que me lleva de cabeza. Tengo en un documento una capa llamada "msgid" ...
  #1 (permalink)  
Antiguo 28/07/2010, 10:45
 
Fecha de Ingreso: octubre-2003
Ubicación: Barcelona
Mensajes: 3
Antigüedad: 20 años, 7 meses
Puntos: 0
Mostrar/ocultar con each() de jquery

Buenas a todos, a ver si me podéis ayudar con este problema que me lleva de cabeza. Tengo en un documento una capa llamada "msgid" que oculto y muestro con jquery mediante dos enlaces. El código en el documento es:

Código HTML:
<a id="ocultar">Ocultar</a> 
<a id="mostrar">Mostrar</a>
<div id="msgid">Capa a mostrar</div> 
El código jquery que hace esto posible es:

Código:
$(document).ready(function(){
	$("#ocultar").click(function(){$("#msgid").slideUp(600)});
	$("#mostrar").click(function(){$("#msgid").slideDown(600)});
});
El problema es el siguiente: necesito tener varias capas a la vez en el mismo documento, y no puedo saber de antemano cuantas seran (entre 1 y 3, entre 1 y 20?) ya que eso depende de una consulta en una base de datos. Cada capa tendrá sus propios botones de mostrar/ocultar.

Hasta ahora lo único que he conseguido es ocultar y mostrar todas las capas con el mismo enlace, pero no cada una por separado. Este el código que tengo hasta ahora:
Código:
$(document).ready(function(){
	$("div#msgid").each(function(i){
		  $(this).hide();
		  $("#ocultar").each(function(j){
				$(this).click(function(){$("div#msgid").slideUp(600)});
		  });
	   	  $("#mostrar").each(function(j){
				$(this).click(function(){$("div#msgid").slideDown(600)});
		  });
	}); 
});
¿Alguna idea?

¡Gracias de antemano!
  #2 (permalink)  
Antiguo 28/07/2010, 12:58
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Mostrar/ocultar con each() de jquery

En principio, no deberían tener el mismo id todos los <div> ni tampoco los enlaces, quizás puedes usar una clase común a todas y a partir de allí seleccionar los elementos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 28/07/2010, 16:28
 
Fecha de Ingreso: julio-2003
Ubicación: Cochabamba Bolivia
Mensajes: 300
Antigüedad: 20 años, 9 meses
Puntos: 14
De acuerdo Respuesta: Mostrar/ocultar con each() de jquery

Hola, en realidad David tiene razon los elementos no deberian tener el mismo id ya que los ids deben ser unicos.

Aun asi Jquery puede diferenciar el id al que se ha lanzando una accion, por lo que se me ocurre puedas usar el selector "next" de Jquery, siempre y cuando el orden de tus etiquetas "a" y "div" sigan el mismo orden en el que lo expones, en cuyo caso podrias hacer algo asi:

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     $("#ocultar").click(function(){
  3.               $(this).next().next().slideUp(600);
  4.         });
  5.     $("#mostrar").click(function(){
  6.               $(this).next().slideDown(600);
  7.         });
  8. });

Nota que al id="ocultar" le puse 2 nexts y al id="mostrar" solo uno.

El selector "next" de Jquery recorre etiqueta tras etiqueta, segun cuantos nexts pongas, recorrera el DOM hasta llegar a la etiqueta cuyo numero sea igual al mumero de .next() que pongas.

Saludos.
__________________
:policia: Uno para todos y todos para uno.

Última edición por sander; 28/07/2010 a las 16:54 Razón: ortografia
  #4 (permalink)  
Antiguo 28/07/2010, 16:49
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 9 meses
Puntos: 105
Respuesta: Mostrar/ocultar con each() de jquery

aparte de las opciones que te han dado, creo que en el each podrias enumeralas con un indice para que se diferencien no ??

Suerte
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog

Última edición por masterojitos; 28/07/2010 a las 16:57 Razón: Sander ya corrigio el "slideDown" xD
  #5 (permalink)  
Antiguo 28/07/2010, 16:54
 
Fecha de Ingreso: julio-2003
Ubicación: Cochabamba Bolivia
Mensajes: 300
Antigüedad: 20 años, 9 meses
Puntos: 14
Respuesta: Mostrar/ocultar con each() de jquery

Tienes razon se me fue el dedo ya esta corregido.

Saludos
__________________
:policia: Uno para todos y todos para uno.
  #6 (permalink)  
Antiguo 28/07/2010, 20:06
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Tema movido desde javascript
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 29/07/2010, 02:33
 
Fecha de Ingreso: octubre-2003
Ubicación: Barcelona
Mensajes: 3
Antigüedad: 20 años, 7 meses
Puntos: 0
Respuesta: Mostrar/ocultar con each() de jquery

Gracias por las aportaciones, de verdad. A continuación os muestro el código definitivo:

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     $("div#msgid").each(function(i){
  3.         $("div#msgid").hide();
  4.        
  5.         $("a#ocultar").click(function(){
  6.                 $(this).next().next().slideUp(600);
  7.         });
  8.         $("a#mostrar").click(function(){
  9.                 $(this).next().slideDown(600);
  10.         });
  11.     });
  12. });

Como veréis he añadido algunos pequeños detalles, como el each()
Código Javascript:
Ver original
  1. $("div#msgid").each(function(i){
y para que por defecto aparezcan todas ocultas he añadido:
Código Javascript:
Ver original
  1. $("div#msgid").hide();

Muchas gracias de nuevo, y perdonad si el nivel de mi pregunta no ha sido muy elevado, pero el javascript no es mi fuerte. Si os puedo echar un cable con algo de php ahí estaré!
  #8 (permalink)  
Antiguo 29/07/2010, 07:24
 
Fecha de Ingreso: julio-2003
Ubicación: Cochabamba Bolivia
Mensajes: 300
Antigüedad: 20 años, 9 meses
Puntos: 14
Respuesta: Mostrar/ocultar con each() de jquery

Que bueno que lo solucionaste.

En cuanto a lo de PHP ahi estaremos sin falta cuando necesitemos ayuda, como dice mi lema "Uno para todos y todos para uno", que bueno que pienses igual.

Saludos.
__________________
:policia: Uno para todos y todos para uno.
  #9 (permalink)  
Antiguo 29/07/2010, 08:03
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Mostrar/ocultar con each() de jquery

Eso no te va a funcionar en ie por los id repetidos, aparte no hace falta un bucle y no se recomienda acceder a un id anteponiendo un elemento elemento#id, si cuando queres acceder a una clase, elemto.class

Usa clases

Código Javascript:
Ver original
  1. <head>
  2. <title>Prueba</title>
  3. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
  4. <script>
  5. $(document).ready(function(){
  6.         $("div.msgid").hide();
  7.  
  8.         $("a.ocultar").click(function(){
  9.             $(this).next().next().slideUp(600);
  10.         });
  11.         $("a.mostrar").click(function(){
  12.             $(this).next().slideDown(600);
  13.         });
  14. });
  15. </script>
  16. </head>
  17. <body>
  18.  
  19. <a class="ocultar">Ocultar</a>
  20. <a class="mostrar">Mostrar</a>
  21. <div class="msgid">Capa a mostrar 1</div>
  22.  
  23. <br />
  24.  
  25. <a class="ocultar">Ocultar</a>
  26. <a class="mostrar">Mostrar</a>
  27. <div class="msgid">Capa a mostrar 2</div>
  28.  
  29. <br />
  30.  
  31. <a class="ocultar">Ocultar</a>
  32. <a class="mostrar">Mostrar</a>
  33. <div class="msgid">Capa a mostrar 3</div>
  34.  
  35.  
  36. </body>
  37. </html>

Etiquetas: Ninguno
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 17:16.