Rekursion innerhalb einer Objektmethode
Andreas
- javascript
0 Martin Jung0 peterS.
Hallo,
habe ein Problem mit folgendem JS-Code:
// *************************************
function Displayer () {
// leerer Konstruktor
}
Displayer.prototype.getAsHtml = function (node, expandLevel) {
html = node.getTitle() + "<br>";
childNodes = node.getChildNodes();
for (i=0; i<childNodes.length; i++) {
if (expandLevel > 0) html += this.getAsHtml(childNodes[i], expandLevel - 1);
// Gedanke: rekursives Durchlaufen des Node-Baumes
// Problem: Rekursion laeuft nicht wie gewuenscht - die for-Schleife wird in jeder
// Ebene nur einmal durchlaufen
}
return html;
}
// *************************************
Ich habe eine Baumstruktur, die aus Node-Objekten besteht, und möchte diesen Baum durchlaufen.
Das Ganze soll für ein Menü verwendet werden.
Das Problem ist, daß die Rekursion nur unvollständig durchgeführt wird.
Kennt jemand dieses Problem?
Beispiel:
Ich habe einen Root-Node, dieser hat meinetwegen 5 ChildNodes, von denen jeder wieder x ChildNodes hat.
Mit obiger Rekursion erfolgt aber nur die Ausgabe des Root-Nodes, des 1. ChildNodes sowie dessen 1. ChildNodes.
Ich kann mir das nicht erklären.
Dankbar für Tips und Denkanstöße:
Andreas
Hi,
ohne mich tiefer mit der konkreten Problematik beschäftigt zu haben:
Was passiert, wenn Du den Zähler i in der rekursiven Methode _lokal_ deklarierst?
Viele Grüße,
Martin Jung
gruss Andreas,
Kennt jemand dieses Problem?
ich koennte daran liegen, dass gecko,msie + co
Dein dokument unterschiedlich "aufknoten"
versuch es doch mal damit, nur element-knoten
in Deinem beispiel zuzulassen - also ungefaehr so:
// *************************************
function Displayer () {
// leerer Konstruktor
}
Displayer.prototype.getAsHtml = function(node,expandLevel) {
var html = "";
if (node.nodeType == 1) { // ELEMENT-node
html += node.getTitle() + "<br>";
// REKURSION //
for (var i=0;i<currNode.childNodes.length;i++) {
html += this.getAsHtml(node.childNodes[i],expandLevel-1);
} // REKURSION //
}
return html;
}
// *************************************
das ding ist jetz aber nicht getestet - nur bei
Dir abgeschrieben und erweitert;
so - jetzt muss ich aber weg - tschuess und
by(t)e by(t)e - peterS. - pseliger@gmx.net