2010-02-10 10 views
23

Ich bin sicher, das ist einfach, aber ich habe keine Ahnung, wie es geht. Wie zähle ich die Anzahl der DOM-Elemente in meiner HTML-Seite? Ich wollte dies in einem Userscript oder Bookmarklet tun, aber ich habe keine Ahnung, wie ich anfangen soll!Firefox Oder JavaScript, zählen Sie das DOM

+1

Möchten Sie wissen, welche DOM-Knoten oder DOM-Knoten HTML-Elemente sind? Das DOM enthält Dinge wie Text, Kommentare und Attribute als Knoten. – edeverett

Antwort

60

verwenden für Element Knoten:

document.getElementsByTagName("*").length 

Für jeden Knoten können Sie Node wie folgt erweitern:

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

Dann alles, was Sie tun müssen, ist document.countChildNodes zu nennen.

+0

Gibt es eine Möglichkeit, die Anzahl der Elemente in Iframes hinzuzufügen? – corretge

+0

@correge Das wäre möglich, wenn Sie Zugriff auf das 'contentDocument' haben. Wiederholen Sie einfach die Elemente, die Sie mit 'document.getElementsByTagName (" * ") erhalten' 'und zählen Sie sie als 1 und für jeden' ​​iframe' Elementknoten ('tagName === 'IFRAME'') fügen Sie die Anzahl der Elemente in seinem' contentDocument hinzu 'stattdessen. – Gumbo

+0

Vielen Dank! Ich habe ein anderes "kleines" Problem: Domains, Protokolle und Ports müssen übereinstimmen. Normal :) – corretge

3

// Sie die gleiche Methode verwenden, um die Anzahl der jedes Tag zu bekommen, wenn es

zählt
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 können Sie tun

document.getElementsByTagName("*").length 

In jQuery können Sie tun

jQuery('*').length 
Verwandte Themen