Foros del Web » Programando para Internet » Jquery »

El método html en jquery devuelve sólo un elemento

Estas en el tema de El método html en jquery devuelve sólo un elemento en el foro de Jquery en Foros del Web. A ver si sé explicarme: Tengo un menú de ayuda. Cada entrada de la ayuda se compone de una cabecera y varios párrafos. La idea ...
  #1 (permalink)  
Antiguo 13/08/2012, 05:53
 
Fecha de Ingreso: abril-2012
Mensajes: 63
Antigüedad: 12 años, 6 meses
Puntos: 2
El método html en jquery devuelve sólo un elemento

A ver si sé explicarme: Tengo un menú de ayuda. Cada entrada de la ayuda se compone de una cabecera y varios párrafos. La idea es que el usuario sólo vea las cabeceras y cuando hace click sobre una de ellas le aparece el párrafo. Simplificando estoy haciendo algo así:

Código Javascript:
Ver original
  1. $('#ayuda').click(function(e){
  2.    
  3.     $('.cuerpoPantalla').load('/include/vista/ayuda.php', function(){
  4.        
  5.         $('.cuerpoPantalla p').hide();
  6.  
  7.         $('.cuerpoPantalla h4').click(function(){
  8.            
  9.                $('.trasCuerpo').hide();
  10.                var textoInsertar = $(this).parent().children('p').html();
  11.                $(this).after('<div class="trasCuerpo"></div>');
  12.                $('.trasCuerpo').text(textoInsertar);
  13.            
  14.         });
  15.    
  16.     });
  17.    
  18.     e.preventDefault();
  19. });

En principio todo funciona como debería: Hago click en el botón ayuda, me aparecen
las entradas y se mantienen ocultos los párrafos, y al hacer click sobre cada entrada se
muestran los párrafos, pero, y ahí viene el problema, sólo aparece el primer párrafo, no los demás. En principio entiendo que con children() estoy seleccionando todos los párrafos, pero parece que no.

¿Alguien puede echarme una mano)
  #2 (permalink)  
Antiguo 13/08/2012, 07:10
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años, 8 meses
Puntos: 47
Respuesta: El método html en jquery devuelve sólo un elemento

Hola antes que nada te recomendaria que para hacer desaparecer y aparecer cosas uses slideToggle de jquery, no entiendo porque le pasas a un solo boton el evento ayuda ya que tienes varias cabeceras y entradas no deberia ser para varios links?.

Te dejo un breve ejemplo aver si es algo parecido a lo que necesitas copialo y pegalo en un html vacio (copia la jquery en su raiz con el nombre jquery.js) y fijate lo que hacen los links al clickarlo.

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  4. <title>Divs</title>
  5.     .cabecera p {
  6.         display:none;
  7.     }
  8. <script src="jquery.js" type="text/javascript"></script>
  9. <script type="text/javascript">
Código Javascript:
Ver original
  1. $(document).ready(function() {
  2.         $(".ayuda").bind("click",function(){
  3.             $(this).next().children().slideToggle("slow");
  4.         })
  5.     })
Código HTML:
Ver original
  1. </head>
  2.  
  3.     <a href="#" class="ayuda"> Ayuda1 </a>
  4.         <div class="cabecera"> Cabecera 1
  5.             <p> 1 </p>
  6.             <p> 2 </p>
  7.             <p> 3 </p>
  8.         </div>
  9.         <a href="#" class="ayuda"> Ayuda2 </a>
  10.         <div class="cabecera"> Cabecera 2
  11.             <p> A </p>
  12.             <p> B </p>
  13.             <p> C </p>
  14.         </div>
  15.  
  16. </body>
  17. </html>

Saludos!
  #3 (permalink)  
Antiguo 13/08/2012, 09:49
 
Fecha de Ingreso: abril-2012
Mensajes: 63
Antigüedad: 12 años, 6 meses
Puntos: 2
Respuesta: El método html en jquery devuelve sólo un elemento

Pues tienes toda la razón, la verdad es que me estaba complicando la vida de mala manera.

Funcionó perfecto, mil gracias
  #4 (permalink)  
Antiguo 13/08/2012, 11:11
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 12 años, 5 meses
Puntos: 127
Respuesta: El método html en jquery devuelve sólo un elemento

.children() de facto devuelve todos los nodos hijos o filtrados por el selector indicado, pero al agregarle .html() sólo es capaz de devolver el html() del primer elemento, esto es, sólo es capaz de devolver los elementos no selectivamente las propiedades de todos los elementos devueltos.

Para recoger las propiedades basta con hacer un bucle con todos los elementos devueltos, estos contienen las propiedades inherentes al objeto original.

Esto es aplicable tanto a html() como a val() o text()

nodoshijos = $(elemento).children();
arraydepropiedad = [];
$.each(nodoshijos,function(i,v){
arraydepropiedad[i] = $(v).html();
});

La probable explicación a esto es que las funciones de devolución de nodos como filter, find o children a su vez son capaces de devolver arrays pero funciones como html() o val() no crean en sí mismas arrays sino que devuelven valores aislados. La cuestión está en el funcionamiento del propio método.

Si se mira un poco jQuery.fn.init

[...]
return e.makeArray(a,this)}

Eso retorna un array, funciones como Children sólo filtran y devuelven a este objeto los nodos hijos para devolver crear y retornar un array-

Un saludo.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor

Última edición por dontexplain; 13/08/2012 a las 11:44

Etiquetas: devuelve, elemento, funcion, html, php
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:28.