Newsgroup: it.comp.lang.javascript
Titolo: memorizzare scelta

il codice che allego in fondo a questa email gestisce un menu la cui demo è 
qui: 
http://code.gosu.pl/dl/mygosuMenu/demo/1.2/example1.html
Il mio problema è questo.
Fin quando navigo il menu, le scelte restano memorizzate. Cioè, clicco su un 
nodo e si aprono i sottonodi.
Però, quando clicco su un link (e nel mio caso apro un'istanza della stessa 
pagina) il menu perde la selezione e vedo tutti i nodi *chiusi*.
E' possibile modificare il sottostante codice per far sì che il menu tenga 
in memoria la situazione (nodi espansi, nodi non espansi) ???
Grazie per l'attenzione
Salvatore Paci
-------------------------------------------------------------------------
function TreeMenu(id) {
this.init = function() {
if (!document.getElementById(
this.id
)) {
alert("Element '"+
this.id
+"' does not exist in this document. TreeMenu 
cannot be initialized");
return;
}
this.parse(document.getElementById(
this.id
).childNodes, this.tree, 
this.id
);
}
this.parse = function(nodes, tree, id) {
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].nodeType != 1) {
continue;
}
if (nodes[i].tagName.toLowerCase() == "li") {
nodes[i].id = id + "-" + tree.length;
tree[tree.length] = new Array();
if (nodes[i].childNodes && this.hasUl(nodes[i].childNodes)) {
nodes[i].className = "section";
var a;
if (a = this.getA(nodes[i].childNodes)) {
a.id
 = nodes[i].id + "-a";
eval("document.getElementById('"+
a.id
+"').onclick = function() {"+
"self.click('"+nodes[i].id+"');"+
"}");
}
} else {
nodes[i].className = "box";
}
}
if (nodes[i].tagName.toLowerCase() == "ul") {
nodes[i].style.display = "none";
id = id + "-" + (tree.length - 1);
nodes[i].id = id + "-section";
tree = tree[tree.length - 1];
}
if (nodes[i].childNodes) {
this.parse(nodes[i].childNodes, tree, id);
}
}
}
this.hasUl = function(nodes) {
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].nodeType != 1) {
continue;
}
if (nodes[i].tagName.toLowerCase() == "ul") {
return true;
}
if (nodes[i].childNodes) {
if (this.hasUl(nodes[i].childNodes)) {
return true;
}
}
}
return false;
}
this.getA = function(nodes) {
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].nodeType == 1) {
if (nodes[i].tagName.toLowerCase() == "a") {
return nodes[i];
}
return false;
}
}
}
this.click = function(id) {
e1 = document.getElementById(id + "-section");
e2 = document.getElementById(id);
if (e1.style.display == "none") {
e1.style.display = "";
e2.className = "section-open";
} else {
e1.style.display = "none";
e2.className = "section";
}
}
var self = this;
this.id
 = id;
this.tree = new Array();
this.init();
}

 function TreeMenu(id) {
E' bene evitare inserire codice troppo lungo, nei post di un NG. Hai
fatto bene a pubblicare il link di cui sopra, bastava quello. :)
-- 
~ "Solo i morti hanno visto la fine della guerra."
(Platone)

 sia visibile.
---------------
Anche se recupero il valore...
come faccio a memorizzare la situazione precedente del menu?
Ciao e grazie 

 come faccio a memorizzare la situazione precedente del menu?
Te l'ho scritto nel post precedente:
"Ovviamente il poter o meno espandere in modo programmatico il menu è
una cosa che dipende da come è stato fatto lo script; se lo prevede."
Il fatto di passare il valore è un modo per comunicare alla richiesta
successiva "la situazione precedente del menu". E così, "memorizzi la
scelta", come dice il subject. Ma per "ripristinare" l'albero in base
alla scelta memorizzata, questo dipende dallo script che usi.
Se non lo prevede, ti conviene cercare uno script che lo faccia. Puoi
anche modificare quello che hai, ma spesso è più complicato.
-- 
~ "Ciò che il cuore conosce oggi, la testa comprenderà domani"
(Seneca)