2010-02-10 12 views
23

Sono sicuro che questo è semplice ma non ho idea di come farlo. Come posso contare la quantità di elementi DOM nella mia pagina HTML? Volevo farlo in un userscript o bookmarklet ma non ho idea di come iniziare!Firefox O JavaScript, conta il DOM

+1

Vuoi conoscere i nodi DOM oi nodi DOM che sono elementi HTML? Il DOM include elementi come testo, commenti e attributi come nodi. – edeverett

risposta

60

Usare questo per Element nodi:

document.getElementsByTagName("*").length 

Per ogni nodo, è possibile estendere Node in questo modo:

Node.prototype.countChildNodes = function() { 
    return this.hasChildNodes() 
    ? Array.prototype.slice.apply(this.childNodes).map(function(el) { 
     return 1 + el.countChildNodes(); 
     }).reduce(function(previousValue, currentValue, index, array){ 
     return previousValue + currentValue; 
     }) 
    : 0; 
}; 

Poi tutto quello che dovete fare è chiamare document.countChildNodes.

+0

c'è un modo per aggiungere il numero di elementi all'interno degli iframe? – corretge

+0

@corretge Ciò sarebbe possibile se si ha accesso a 'contentDocument'. Basta iterare gli elementi che ottieni con 'document.getElementsByTagName (" * ")' e contarli come 1 e per ciascun nodo dell'elemento 'iframe' (' tagName === 'IFRAME'') aggiungi il numero di elementi nel suo 'contentDocument 'invece. – Gumbo

+0

Grazie mille! Ho un altro "piccolo" problema: domini, protocolli e porte devono corrispondere. Normale :) – corretge

3

// È possibile utilizzare lo stesso metodo per ottenere il conteggio di ogni tag, se è importante

function tagcensus(pa){ 
    pa= pa || document; 
    var O= {}, 
    A= [], tag, D= pa.getElementsByTagName('*'); 
    D= A.slice.apply(D, [0, D.length]); 
    while(D.length){ 
     tag= D.shift().tagName.toLowerCase(); 
     if(!O[tag]) O[tag]= 0; 
     O[tag]+= 1; 
    } 
    for(var p in O){ 
     A[A.length]= p+': '+O[p]; 
    } 
    A.sort(function(a, b){ 
     a= a.split(':')[1]*1; 
     b= b.split(':')[1]*1; 
     return b-a; 
    }); 
    return A.join(', '); 
} 

alert (tagcensus())

2

In JavaScript si può fare

document.getElementsByTagName("*").length 

In jQuery si può fare

jQuery('*').length 
Problemi correlati