2010-02-10 10 views
23

Estoy seguro de que esto es simple pero no tengo ni idea de cómo hacerlo. ¿Cómo cuento la cantidad de elementos DOM en mi página HTML? Quería hacer esto en un UserScript o bookmarklet pero no tengo idea de cómo empezar.Firefox O JavaScript, cuente el DOM

+1

¿Desea conocer los nodos DOM o los nodos DOM que son elementos HTML? El DOM incluye cosas como texto, comentarios y atributos como nodos. – edeverett

Respuesta

60

uso de este Element nodos:

document.getElementsByTagName("*").length 

Para cualquier nodo, se puede extender Node así:

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; 
}; 

Entonces todo lo que tiene que hacer es llamar a document.countChildNodes.

+0

¿hay alguna manera de agregar la cantidad de elementos dentro de iframes? – corretge

+0

@corretge Eso sería posible si tiene acceso al 'contentDocument'. Simplemente itere los elementos que obtiene con 'document.getElementsByTagName (" * ")' y cuentelos como 1 y para cada nodo del elemento 'iframe' (' tagName === 'IFRAME'') agregue el número de elementos en su 'contentDocument 'en cambio. – Gumbo

+0

¡Muchas gracias! Tengo otro 'pequeño' problema: los dominios, protocolos y puertos deben coincidir. Normal :) – corretge

3

// Se puede utilizar el mismo método para obtener el recuento de cada etiqueta, si importa

alerta
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(', '); 
} 

(tagcensus())

2

En JavaScript se puede hacer

document.getElementsByTagName("*").length 

En jQuery que puede hacer

jQuery('*').length 
Cuestiones relacionadas