2012-03-01 12 views
9

Deseo realizar un seguimiento de TODOS los elementos en los que se hace clic en una página HTML. Necesito una buena manera de hacer referencia exactamente a qué elemento se hizo clic (para poder reproducir los clics en una página HTML idéntica por separado más adelante).RASTREO de TODOS los elementos cliqueados mediante JavaScript

¿Hay alguna manera de hacer referencia al elemento al que se hizo clic?

Podría agregar identificaciones únicas y nombres de clase a cada elemento de la página. Pero me imagino que debe haber otra forma.

La página HTML en la que reproduciré los clics será idéntica.

Algo Lite presente (pero el elemento más información exacta wich era, tal vez eso es posible recoger) ...

Código de rastrear elemento wich que se hizo clic Código

var arrayWithElements = new Array(); 

document.onclick = clickListener; 

function clickListener(e) { 
    var clickedElement; 
    if(e == null) { 
     clickedElement = event.srcElement; 
    } else { 
     clickedElement = e.target; 
    } 
    arrayWithElements.push(clickedElement) 
    alert(arrayWithElements); 
} 

que será utilizado en una página HTML idéntica

document.someHowGetTheElement().onclick(); 
+2

Adición de ID para cada elemento es probablemente la forma más fácil. Puedes agregarlos con JavaScript también. –

+0

¿Qué quiere decir con "información más exacta", actualmente clickedElement le dará una referencia al nodo, no sé qué puede ser más exactamente que esto. –

+0

@James: 'this' se referirá a' document', no al elemento cliqueado. @ Dr. Molle: Él menciona "reproducir" los eventos en otra página. Realmente no puede persistir o transferir referencias a nodos DOM. –

Respuesta

14

supongo que busca algo como esto:


var arrayWithElements = new Array(); 

function clickListener(e) 
{ 
    var clickedElement=(window.event) 
         ? window.event.srcElement 
         : e.target, 
     tags=document.getElementsByTagName(clickedElement.tagName); 

    for(var i=0;i<tags.length;++i) 
    { 
     if(tags[i]==clickedElement) 
     { 
     arrayWithElements.push({tag:clickedElement.tagName,index:i}); 
     console.log(arrayWithElements); 
     }  
    } 
} 

document.onclick = clickListener; 

Se almacenará en cada clic en un objeto que contiene el tagName del elemento y el índice. por lo que puede acceder a este elemento en otro "ejemplo" de este documento mediante

document.getElementsByTagName(item.tag)[item.index] 

(donde elemento es un elemento de arrayWithElements)

Demostración: http://jsfiddle.net/doktormolle/z2wds/

+0

Impresionado! ¡Creo que eso es exactamente lo que estaba buscando! Muchas gracias :) – user1087110

+1

+1 Buena idea. Puede valer la caché de los resultados de 'getElementsByTagName'. –

+0

Sí lo hace, he aplicado la propuesta –

1

puede utilizar this related question. En otras palabras, una buena manera de saber en qué elemento se hizo clic sin agregar IDs por todos lados es usar el método .cssSelectorAsString() de jquery. Por ejemplo:

function clickListener(e) { 
    var clickedElement; 
    if(e == null) { 
     clickedElement = event.srcElement; 
    } else { 
     clickedElement = e.target; 
    } 
    arrayWithElements.push($(clickedElement).cssSelectorAsString()); // <==== 
    alert(arrayWithElements); 
}  

Ver también: Get unique selector of element in Jquery

+0

No estoy usando jquery (se me olvidó mencionar). ¡Pero miraré el menú de xPath! ¡Gracias! – user1087110

Cuestiones relacionadas