Script avec fonction récursive permettant d'afficher un arbre
agaillar
Messages postés18Date d'inscriptionsamedi 1 mai 2004StatutMembreDernière intervention 7 décembre 2004
-
9 nov. 2004 à 16:01
agaillar
Messages postés18Date d'inscriptionsamedi 1 mai 2004StatutMembreDernière intervention 7 décembre 2004
-
9 nov. 2004 à 16:18
Bonjour,
j'ai réalisé un script en javascript permettant d'afficher un arbre dont les noeuds sont stockés dans un tableau.
Cependant je ne comprends pas pourquoi ma fonction n'affiche que la racine et que la récursivité ne marche pas.
Il n'y a aucun retour en arrière (cf les pop up qui servent de test)
// Méthode de vérification de la présence d'un élément
// un élément est present si son pere est ouvert ou est 0
function Present(n)
{
while (Menu[n].pere != 0)
{
n = Menu[n].pere;
if (!(Menu[n].ouvert)) {return false;}
}
return true;
}
Element.prototype.Present = Present;
// Méthode de modification de l'état d'un élément
function Changer()
{
if (this.ouvert)
{this.ouvert = false;} // si ouvert, on ferme
else
{ // sinon, on ferme tous les éléments de la même branche et on l'ouvre
/*var i = this.pere + 1;
while (i <= nb && Menu[i].profondeur >= this.profondeur)
{
Menu[i].ouvert = false;
i++;
}*/
this.ouvert = true;
}
AffMenu();
}
Element.prototype.Changer = Changer;
// Méthode d'écriture d'un élément
function Ecrire(n)
{
var chaine = "";
if (!(this.Present(n))) return chaine ; // l'élément ne doit pas être affiché
chaine += "<tr><td style='position:relative; left:" + 25 * this.profondeur + "px'>"
//for (var i = 0; i < this.profondeur; i++) {chaine += " ";} petit décalage
if (this.type == fichier)
{chaine += "" + this.texte + "";}
else
{chaine += "" + this.texte + ""}
return chaine + "</td></tr>";
}
Element.prototype.Ecrire = Ecrire;
// Fonction d'ajout d'un élément au menu
function Ajouter(type, profondeur, texte, lien)
{
nb++;
var pere = nb - 1;
while (pere != 0 && Menu[pere].profondeur >= profondeur) {pere--;}
Menu[nb] = new Element(type, profondeur, pere, texte, lien);
}
// Création de l'objet menu dans la page
document.writeln('
');
// Affichage du menu dans l'état actuel
function AffMenu()
{
var chaine = "\";
for (var i = 1; i < Menu.length; i++)
{
chaine += Menu[i].Ecrire(i);
}
chaine += "
";
document.getElementById('menu').innerHTML = chaine;
}