var anzahl_elemente=countDOM_call(document.getElementById('body'),0);
alert(anzahl_elemente)
function countDOM_call(ele,p_count){
var temp=ele;
count=temp.childNodes.length;
if(temp.hasChildNodes()){
for(var i=0;i<temp.childNodes.length;i++){
count+=countDOM_call(temp.childNodes[i]);
}
}
return count;
}
Ein paar Tipps:
Falls getElementById('body') das body-Element anspricht: Das body-Element kannst du über document.body ansprechen, eine ID ist nicht nötig.
Was macht die Variable p\_count? Sie wird nicht benutzt.
Warum kopierst du ele in die Variable temp? Du kannst auch gleich die Variable ele verwenden.
Warum ist die Variable count global? Das muss und sollte sie nicht.
Der zusätzliche Aufruf von hasChildNodes ist unnötig, weil du bereits zuvon die Länge in Erfahrung gebracht hast.
In der Schleife solltest du nicht immer wieder temp.childNodes.length notieren, das verlangsamt die Geschichte sehr.
~~~javascript
alert(countDescendantNodes(document.body));
function countDescendantNodes (el) {
var childNodesLength = el.childNodes.length,
sum = childNodesLength;
if (childNodesLength > 0) {
for (var i = 0; i < childNodesLength; i++) {
sum += arguments.callee(el.childNodes[i]);
}
}
return sum;
}
(für IE 5.5 geeignet ;-))
Wenn man das performanter braucht, könnte man übrigens mit TreeWalkern oder NodeIteratorn arbeiten.
Mathias