Foros del Web » Programando para Internet » Javascript »

Generando un árbol con los nodos...

Estas en el tema de Generando un árbol con los nodos... en el foro de Javascript en Foros del Web. Hola, Estoy viendo este site: http://www.pepemolina.com/DOM/index.html En donde cuentan como generar un arbol de un site cualquiere a traves de ese codigo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 07/12/2011, 12:11
 
Fecha de Ingreso: septiembre-2008
Mensajes: 211
Antigüedad: 16 años, 3 meses
Puntos: 2
Generando un árbol con los nodos...

Hola,


Estoy viendo este site:

http://www.pepemolina.com/DOM/index.html

En donde cuentan como generar un arbol de un site cualquiere a traves de ese codigo:

Código Javascript:
Ver original
  1. <script language="javascript" >
  2.        function leerNodos(raiz, lugar)  {
  3.         var soy = document.createElement("div");
  4.         soy.style.marginLeft = "1cm";
  5.         var yo = document.createTextNode(raiz.nodeName);
  6.         soy.appendChild(yo);
  7.         var hijos = raiz.childNodes;
  8.         lugar.appendChild(soy);
  9.         if (hijos.length > 0)
  10.            for (var i = 0; i < hijos.length; i ++)
  11.               if (hijos[i].nodeType == 1)
  12.                 leerNodos(hijos[i], soy);
  13.               else  {
  14.                 var DatosHijo = document.createTextNode(hijos[i].nodeName + " : " + hijos[i].nodeValue);
  15.                 var elHijo = document.createElement("div");
  16.                 elHijo.style.marginLeft = "1.3cm";
  17.                 elHijo.appendChild(DatosHijo);
  18.                 lugar.appendChild(elHijo);
  19.               }
  20.        }
  21.  
  22.        function mostrar()   {
  23.         var colgar = document.getElementById("arboleda");
  24.         while (colgar.childNodes.length != 0)
  25.            colgar.removeChild(colgar.childNodes[0]);
  26.         var x = document.createElement('div');
  27.         leerNodos(document.documentElement, x);
  28.         document.getElementById("arboleda").appendChild(x);
  29.        }
  30.     </script>


Código HTML:
<body>
     <h1 style="background-color: #eeeeee; color: blue; text-align: center;">
     	Árbol
     </h1>
     <div style="border-width: 2; border-style: none none solid none; border-color: blue;">
     	<p style="text-indent: 1cm; margin: 0px auto 0px auto">
     	   Este es un simple ejemplo de generación de un árbol de nodos dentro de un documento...
     	</p>
     	<br />
     </div>
     	<form style="text-align: center; border-width: 2; border-style: none none solid none; border-color: blue;"
     	 action="javascript: mostrar()">
     	<br/>
     	<input type="submit" value="Generar árbol" style="display:block;" />
     	<br />
     </form>
     <br />
     <div id=arboleda>
     </div>
  </body> 

Quisiera saber si se tienen que cambiar las variables raiz y lugar. Si es que es lo que tiene que ir? Ademas yo no empiezo por el html sino que empiezo por el BODY.

Alguan ayuda?
  #2 (permalink)  
Antiguo 07/12/2011, 12:31
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, 8 meses
Puntos: 1485
Respuesta: Generando un árbol con los nodos...

buenas,
la función leerNodos en si sola es genérica. es decir, esta adaptado para que tu puedas indicar desde cual elemento analizar y dónde generar el árbol. por tanto, cuando invoques la función, debes proveer esos parámetros. fíjate como inicialmente se invoca la función leerNodos dentro de la función mostrar. en fin, no tienes que hacerle ningún cambio a la función a no ser que quieras adaptarle algo adicional.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 07/12/2011, 13:14
 
Fecha de Ingreso: septiembre-2008
Mensajes: 211
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Generando un árbol con los nodos...

Ahà si me funciona es decir sobre una pàgina html.

Código HTML:
<html>
<head> 
     <title></title>
</head>
<body>

<div>
     <h1>TEXTO1</h1>
     <p>TEXTO2</p>
</div>

</body>
</html> 
Modifiqué el codigo para que en vez de empezar por el html como raiz empezara por el body y ya funciona asi que me tira lo siguiente:

Código HTML:
BODY
DIV
#text : TEXTO1
P
#text : TEXTO2
#text :
#text :
#text :
#text :

Lo que quiero es poder meter en un array todo el contenido de los DIV que me encuentre y de los <P>.
  #4 (permalink)  
Antiguo 07/12/2011, 13:31
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, 8 meses
Puntos: 1485
Respuesta: Generando un árbol con los nodos...

para eso puedes usar el metodo getElementsByTagName. por supuesto, con dicha función solo obtendrás las referencias a los elementos. si quieres obtener el contenido, tienes que iterar la colección y accesar a la propiedad innerHTML o cualquier equivalente.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 07/12/2011, 13:52
 
Fecha de Ingreso: septiembre-2008
Mensajes: 211
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Generando un árbol con los nodos...

Tendrias algun ejemplo para darme alguna ayuda?
  #6 (permalink)  
Antiguo 07/12/2011, 14:06
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, 8 meses
Puntos: 1485
Respuesta: Generando un árbol con los nodos...

en pseudo-código
Código:
SET elem TO getelementsbytagname(tagname)
SET content TO ""
FOR i = 0 TO length(elem)
	APPEND elem(i).innerHTML TO content
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 09/12/2011, 10:03
 
Fecha de Ingreso: septiembre-2008
Mensajes: 211
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Generando un árbol con los nodos...

El SET para que lo pones exactamente? Solo tendriamos que guardar en un array() todo el contenido de las <p> y el contenido de los <h1>.
  #8 (permalink)  
Antiguo 09/12/2011, 10:19
 
Fecha de Ingreso: septiembre-2008
Mensajes: 211
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Generando un árbol con los nodos...

Como hacer esto:

var p = document.getElementsByTagName('P')[0].innerHTML;

Para todos los parrafos y guardarlos en un array()?
  #9 (permalink)  
Antiguo 09/12/2011, 10:40
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, 8 meses
Puntos: 1485
Respuesta: Generando un árbol con los nodos...

Cita:
El SET para que lo pones exactamente?
es un pseudocódigo, el cual no intenta ser el código final sino un lenguaje intermedio para demostrar la estructura logística. SET significa "asignar a"; en el pseudocódigo, asignar a la variable "elem". fijate como esta la estructura, antes de obtener el contenido primero se invoca el método indicando el nombre del elemento. en tu caso estas invocando y accesando al primer elemento. precisamente, getElementsByTagName te devuelve un array.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #10 (permalink)  
Antiguo 09/12/2011, 12:19
 
Fecha de Ingreso: septiembre-2008
Mensajes: 211
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Generando un árbol con los nodos...

Código Javascript:
Ver original
  1. function listP(){
  2.  
  3.         var p = document.getElementsByTagName("p");
  4.  
  5.         var pValues = new Array();
  6.         for(var i=0; i < p.length; i++)
  7.         {
  8.                 pValues[i] = p[i].innerHTML;
  9.         }
  10.        
  11.         console.log(pValues);
  12.     }
  13.    
  14.     listP();

Con esto consigo crear un array con todas las P pero como hago para integrarlo en el codigo recursivo del Inspector DOM:

http://www.pepemolina.com/DOM/index.html

Saludos!
  #11 (permalink)  
Antiguo 09/12/2011, 13:27
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, 8 meses
Puntos: 1485
Respuesta: Generando un árbol con los nodos...

lo que no logro comprender es qué es lo que te tiene aferrado al script de caricatos. quiero decir, ¿qué es lo que quieres hacer que tanto necesitas dicho script pudiendolo hacer con funciones nativas como getElementsByTagName? en todo caso, mi recomendación es que utilices un código más genérico para recorrer los elementos al cual le puedas pasar una función donde tú indiques la tarea a realizar. no suele suceder muy a menudo pero he aquí mi versión.

Código:
function Traverser(node, callback){
	while(node){
	if(node.hasChildNodes()) Traverser(node.firstChild, callback);
	var _node = node.nextSibling;
	callback(node);
	node = _node;
	}
}
digamos por ejemplo que quiero capturar todos los nodos tipo Text y Comment.
Código:
var text_comment = [];
Traverser(document, function(node){
if(node.nodeType == 3 || node.nodeType == 8) text_comment.push(node);
});
otro ejemplo, eliminar todos los nodos Text de un elemento particular.
Código:
Traverser(document.getElementById('foo'), function(n){
if(n.nodeType == 3) n.parentNode.removeChild(n);
});
en fin, en el callback debes proveer una función con lo que tu quieras hacer con el nodo en iteración.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #12 (permalink)  
Antiguo 12/12/2011, 09:08
 
Fecha de Ingreso: septiembre-2008
Mensajes: 211
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Generando un árbol con los nodos...

Perfecto! =) Asi imagino que la funcion Traverser lo que hace es recorrer la DOM de cualquier pagina web?

Y en la funcion pondriamos la condicion para cuando se encuentre en dicha posicion de la DOM, verdad?

El codigo de caricatos en principio no estoy aferrado a el solo que de los que encontre por la red era el que hacia algo parecido a lo que yo queria hacer.

Ahora bien si de una pagina quiero guardar en una misma variable como bien hiciste con la variable "text_comment" como podria yo guardar en una variable "parrafos" todo aquello que tenga SÓLO las siguientes estructuras:

1-
<div>
<hX>Titulo</hX>
<p>blalablablablabla</p>
</div>

2-
<p>blablablabla</p>

No se si me explique bien...Es decir la funcion que tengo que construir en Traverser() que de algun modo algo similiar a la funcion que publiqué de listP()

Código Javascript:
Ver original
  1. function listP(){
  2.  
  3.         var p = document.getElementsByTagName("p");
  4.  
  5.         var pValues = new Array();
  6.         for(var i=0; i < p.length; i++)
  7.         {
  8.                 pValues[i] = p[i].innerHTML;
  9.         }
  10.        
  11.         console.log(pValues);
  12.     }
  13.    
  14.     listP();


Muchisimas gracias!

Saludos!
  #13 (permalink)  
Antiguo 12/12/2011, 11:38
 
Fecha de Ingreso: septiembre-2008
Mensajes: 211
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Generando un árbol con los nodos...

Bueno veo que tu funcion es similar a la de:


https://gist.github.com/958000

Como hago en la funcion para acceder SOLO a los contenidos de las P.

Código HTML:
Ver original
  1. P:null
  2. #text:Tsjklpdsokdmnsojñndksjn oldn sjkldn sjkldnslkdnsjkl njklsdn jklsndjksndsjklds .

Si te fijas si apunto a P evidentmente tiene un valor vacio. Lo que quisiera hacer és apuntar a #text a ver si podeis ayudarme =)

Muchas gracias.

Última edición por mesoriginal; 12/12/2011 a las 11:39 Razón: Salio una URL privada.

Etiquetas: html, input
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 19:28.