2011-01-31 8 views
6

Ritengo che questo dovrebbe essere un problema facile, ma purtroppo mi trovo bloccato. Quello che sto cercando di fare è impostare un modo in modo che ogni volta che si fa clic su una cella su una tabella (o ovunque), viene visualizzato il parentNode di ogni elemento, essenzialmente attraversando l'albero DOM. Ho pensato che avrei bisogno di usare elem.parentNode, ma sono bloccato sulla parte di attraversamento. Qualsiasi guru là fuori che può darmi una mano, sarebbe molto apprezzato.Attraversare l'albero DOM per visualizzare le informazioni sul parentNode

risposta

10
var element; //your clicked element 
while(element.parentNode) { 
    //display, log or do what you want with element 
    element = element.parentNode; 
} 
+1

Grazie per l'aiuto. Domanda veloce però, perché usare element.parentNode al posto dell'elemento? – NinjaCode

+0

Ogni elemento in DOM ha il suo 'parentNode' - escluso il nodo radice, che è' Document'. Quindi esegui l'iterazione dell'elemento tanto a lungo, dato che l'elemento ha un 'parentNode'. Nel corpo di 'while si assegnano gli elementi correnti' parentNode' alla variabile di elemento, quindi potrebbe essere eseguito fino a quando non raggiungerà 'Documento' che non ha' parentNode'. – singles

3
var tables = document.getElementsByTagName('table'); 
for (var i=0,len=tables.length;i<len;++i){ 
    tables[i].onclick = function(evt){ 
    if (!evt) evt = window.event; 
    var element = evt.target || evt.srcElement; 
    while (element){ 
     console.log(element); 
     element = element.parentNode; 
    } 
    }; 
} 

Se si vuole veramente clic su qualsiasi elemento in tutto il mondo, quindi è sufficiente:

document.body.onclick = function(evt){ 
    if (!evt) evt = window.event; 
    var element = evt.target || evt.srcElement; 
    while (element){ 
    console.log(element); 
    element = element.parentNode; 
    } 
}; 
+0

ho pensato fino ad oggi che le proprietà di evento come '' currentTarget' e target' non erano disponibili in IE . Sembra che abbiano cugini in IE, come con altre proprietà. Grazie per l'intuizione. –

+0

+1 e buon lavoro al raggiungimento di 10k – qwertymk

+0

'getElementsByTagName' restituisce un oggetto non un array quindi è necessario utilizzare' Array.prototype.method.call' o [creare un array falso] (http://stackoverflow.com/ questions/4513162/document-getelementsbytagname-return-value) per iterarlo correttamente. – rxgx

Problemi correlati