Il problema è che non hai definito cosa sia la gerarchia. Mi spiego.
Per ogni livello non hai definito cosa sia un sotto menu o una voce di menu finale.
Ho modificato il tuo script per avere sempre la stessa struttura per un livello di menu. Ossia un livello di menu è composto da :
codice:
un <div>
un <a>
tra 0 e n altri sotto livelli
Cosi ottieni una struttura che sarà semplice automatizzare con un liguaggio lato server.
Ecco il codice
codice:
<html><head><title>Javascript</title>
<style type="text/css">
<!--
div {display:block}
-->
</style>
<script language="javascript1.2">
<!--
var oggetto = new Array();
function hideFrom(whichLayer) {
if (document.getElementById(whichLayer) == null ) {
return;
}
var oColl = document.getElementById(whichLayer).children;
var i = 0;
for (i=0;i<oColl.length;i++) {
var curObj = oColl.item(i);
if (curObj.tagName == "DIV") {
document.getElementById(curObj.id).style.display = "none";
oggetto[whichLayer] = true;
hideFrom(curObj.id);
}
}
}
function showNextLevel(whichLayer) {
if (document.getElementById(whichLayer) == null ) {
return;
}
var oColl = document.getElementById(whichLayer).children;
var i = 0;
for (i=0;i<oColl.length;i++) {
var curObj = oColl.item(i);
if (curObj.tagName == "DIV") {
document.getElementById(curObj.id).style.display = "block";
oggetto[whichLayer] = false;
}
}
}
function my_layer(whichLayer,hide) {
if ( oggetto[whichLayer] )
{
showNextLevel(whichLayer);
} else {
hideFrom(whichLayer);
}
}
//-->
</script>
</head>
<body>
<div id="layer_1" style="padding-left: 30px;">
1
<div id="layer_1_1" style="padding-left: 30px;">
1_1
<div id="layer_1_1_1" style="padding-left: 30px;">
1_1_1
</div>
<div id="layer_1_1_2" style="padding-left: 30px;">
1_1_2
</div>
</div>
<div id="layer_1_2" style="padding-left: 30px;">
1_2
<div id="layer_1_2_1" style="padding-left: 30px;">
1_2_1
</div>
</div>
<div id="layer_1_3" style="padding-left: 30px;">
1_3
</div>
</div>
</body></html>
Un'ultima cosa. Cosi funziona solo per IE e forse Firefox.