2009-05-19 15 views
17

Estoy atravesando un documento HTML usando javascript DOM. Quiero hacer una lista (una matriz en realidad) de todos los nodos/elementos y sus valores. Encontré un script para recorrer DOM, pero ¿cómo puedo almacenar cada valor de nodo en una matriz? Parece que no puedo encontrar el identificador único para un nodo. Alguien tiene punteros? Estaba pensando en xpath o algo así.Cuál es el identificador único para un elemento DOM/nodo

Es una buena idea considerar xpath como nodo como el identificador único. Si es así, ¿cómo obtengo xpath de un elemento al atravesar el DOM?

+1

¿Ha considerado que una lista de todos los elementos y valores * * es el DOM? – annakata

+0

Después de que tenga los elementos en una matriz, ¿cuáles son sus planes? Si va a atravesar la matriz, sería más fácil atravesar el DOM. –

Respuesta

19

Como programador nacido y criado en el mundo de C y C++, mi primera respuesta a este tipo de pregunta habría sido "¡almacenar sus direcciones en la matriz!". Pero después de un par de años jugando con la web, puedo dar la respuesta correcta:

En javascript, puede almacenar directamente las referencias en los objetos de la matriz. Y no, xpath no es una buena idea para esto; usar referencias es más simple y mejor. Así que una respuesta directa a su pregunta es: no hay un identificador único para un elemento/nodo DOM excepto en sí.

En javascript, todos los objetos se pasan por referencia. Así que aquí hay un código de ejemplo para la forma de hacerlo:

var theArray = []; 
var theNodeToTraverse = document.getElementById('domelementtosearch'); 

traverseAndStore(theNodeToTraverse); 

function traverseAndStore(node) 
{ 
    if(node==null) return; 
    theArray[ theArray.length ] = node; 
    for(i=0; i<node.childNodes.length; i++) 
     traverseAndStore(node.childNodes[i]); 
} 
+0

hey thnx por tus comentarios! – Annibigi

+0

¿Qué hace este código? – KJW

+0

este código simplemente atraviesa todos los elementos secundarios de 'theNodeToTraverse' y almacena referencias a los elementos DOM secundarios en' theArray'. – jrharshath

0

Usted puede obtener algo similar a XPath con algo como esto. Atraviesa el dom hacia arriba desde el elemento de entrada a través de la propiedad parentNode.

https://gist.github.com/sebjwallace/3c0a6f7493ce23134516

Se emitirá una cadena como esta.

"# documento/HTML/cuerpo/DIV"

var getElementPath = function(el){ 
    var path = el.nodeName; 
    var parent = el.parentNode; 
    while(parent){ 
    path = parent.nodeName + '/' + path; 
    parent = parent.parentNode; 
    } 
    return path; 
} 
+5

A los efectos de una identificación única, esto fallaría si hubiera dos DIV que fueran hijos del elemento BODY, ya que ambos tendrían la misma cadena de salida. Esto invalidaría la singularidad de esto como una identificación. –

Cuestiones relacionadas