begin process at 2010 09 04 01:41:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Javascript

 > 

Archives

 > 

AU SECOURS !!!

 > 

script avec fonction récursive permettant d'afficher un arbre


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

script avec fonction récursive permettant d'afficher un arbre

mardi 9 novembre 2004 à 16:01:08 | script avec fonction récursive permettant d'afficher un arbre

agaillar

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)

MErci de votre aide.

mardi 9 novembre 2004 à 16:18:32 | Re : script avec fonction récursive permettant d'afficher un arbre

agaillar

voici le script:
// JavaScript Document
// Menu de profondeur variable

var fichier = 0;
var dossier = 1;
var nb = 0;
var Menu = new Array();

// Construction du menu, attention à l'ordre.
// 4 arguments :
// - le type : dossier ou fichier
// - la profondeur
// - le texte
// - le lien




//Creation des objets à mettre dans l'arbre
tab= new Array();
tab["nom"]="Arbre";


tab[0]= new Array();
tab[0]["nom"]="racine1";

tab[0][0]= new Array();
tab[0][0]["nom"]="fils 1";
tab[0][0][0]="sous fils 1";
tab[0][0][1]="sous fils 2";

tab[0][1]="fils 2";
tab[0][2]="fils 3";

tab[1]= "bibi"



//Demande d'affichage de l'arbre de racine tab

Afficher(tab,0);



//fonction récursive permettant d'afficher l'arbre de manière générique

function Afficher(tab, prof)
{
window.alert("Ajouter(dossier," +prof+ "," +tab["nom"]+ ",#);");
Ajouter(dossier,prof,tab["nom"],"#");
for (i=0;i<tab.length;i++){

if (tab[i]["nom"])
{
//window.alert(tab[i]);
Afficher(tab[i],(prof+1));
}
else
{
window.alert("sans fils Ajouter(fichier," +(prof+1)+ "," +tab[i]+ ",#);");
Ajouter(fichier,(prof+1),tab[i],"#");
}
}
}


/*

//Cette solution fonctionne

Ajouter(dossier, 0, "Dossier 1", "#");
Ajouter(dossier, 1, "Fichier 1", "#");
Ajouter(fichier, 1, "Fichier 2", "#");
Ajouter(dossier, 0, "Dossier 2", "#");
Ajouter(fichier, 1, "Fichier 1", "#");
Ajouter(dossier, 1, "Sous-Dossier 1", "#");
Ajouter(dossier, 2, "Fichier 1", "#");
Ajouter(fichier, 3, "Scroutch", "#");
Ajouter(fichier, 2, "Fichier 2", "#");
Ajouter(dossier, 1, "Sous-Dossier 2", "#");
Ajouter(fichier, 2, "Fichier 1", "#");
Ajouter(fichier, 1, "Fichier 2", "#");
Ajouter(fichier, 0, "Fichier 1", "#");
*/


// L'objet Element
function Element(type, profondeur, pere, texte, lien)
{
this.type = type;
this.profondeur = profondeur;
this.pere = pere;
this.ouvert = false;
this.texte = texte;
this.lien = lien;
}




// 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 += "<a href='" + this.lien + "' onMouseOver=\"window.status='Ouvrir " + this.texte + "'; return true;\" onMouseOut=\"window.status=''; return true;\">" + this.texte + "</a>";}
else
{chaine += "<a href='#' OnMouseDown='Menu[" + n + "].Changer();' target='_self' onMouseOver=\"window.status='" +((this.ouvert) ? "Fermer " : "Etendre ") + this.texte +"'; return true;\" onMouseOut=\"window.status=''; return true;\">" + this.texte + "</a>"}
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('<div id="menu"></div>');

// Affichage du menu dans l'état actuel
function AffMenu()
{
var chaine = "<table>";
for (var i = 1; i < Menu.length; i++)
{
chaine += Menu[i].Ecrire(i);
}
chaine += "</table>";
document.getElementById('menu').innerHTML = chaine;
}


Cette discussion est classée dans : script, fonction, arbre, afficher, récursive


Répondre à ce message

Sujets en rapport avec ce message

fichier css en fonction du navigateur [ par stephbb75 ] Salut Tous,Une question peut être bette !! Est ce que je peut inclure un fichier css en fonction du navigateur !!En claire, dans head si je met un scr Fonction qui permet de fermer une popup après le chargement de cette popup [ par Nabel ] Bonjour, bonjour,Voilà, j'ai fait un script ASP qui permet de créer un ficheir xls sur le serveur, or, je ne veux pas que ce ficheir reste sur le serv Afficher du JS et PHP [ par DuncanIdaho ] Salutje cherche a faire un script de banniere pour mon portail, mais je galere un peu...voila ce que je veux faire :Que le "client" n'ai qu'a c/c un c Recherche script pour une toolbar frame . [ par juki_webmaster ] Bonjour , bonne st valentin à tous & a toute .Pour www.invitia.com ( futur moteur de recherche )Je cherche un javascript ou un code html qui va affich Effet de texte [ par romain2boss ] Salut,je suis pas un fan de javascript, et je cherche de puis un bon bout de temps un script de défilement de texte qui fasse un peu comme l'intro de afficher un article de journal sur plusieurs colonnes [ par onix88 ] Bonjour,je cherche un script pour afficher un texte sur plusieurs colonnes avec des boutons pour revenir à l'affichage unicolonne ou multicolonne et l Rationaliser une fonction... [ par Grand Mamamouchi ] Bonjour !j'ai ecrit un script qui produit un effet de generique de film (le texte s'evanouit vers le haut et vers le bas de la fenetre). Il fait exact function afficher(calque) [ par biloui59 ] Salut tt le mondeje ne comprends pas pourquoi la fonction suivante ne marche pas:function afficher(calque) { for(i=1;i nom=calque"+i+"; document.get appel fonction [ par cosminutza ] Salut! Je voudrais transmettre a la partie script (javascript) d'une image SVG contenue dans une page web, une string contenant le nom de la fonction redirection navigateur ET résolution [ par cristina49 ] bonjour,je voudrait juste avoir un petit renseignement. j'ai trouvé sur internet des scripts pour rediriger en fonction de la résolution et d'autres e


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales