Andreas: Rekursion innerhalb einer Objektmethode

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

  1. 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

  2. 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