N'abend kaplar
"...und das Endergebnis hat mich ein wenig erschlagen...."
Das ist gut (ich meine, daß es Dich nicht ganz erschlagen hat), denn -
wie mein Opa immer gesagt hat: Was Dich nicht umbringt, härtet ab.
1.) "...das Menü soll sich aus den Einträgen aus dem Array generieren..."
eh schon klar, wobei ich's ganz praktisch finde (deshalb vor allem der
Verweis auf diesen andern thread), zum Notieren der Struktur eben
_keine_ Arrays zu verwenden, sondern Objecte.
Arrays kann man nehmen zur Notierung der diversen link-Spezfikationen,
aber genausogut kann man auch, wie in dem Beispiel aus dem andern thread,
komma-separierte strings nehmen, das ist nicht weiter wichtig.
2.) "...Die Menütiefe soll variabel bleiben...."
Das ist, wie bereits gezeigt, überhaupt kein Problem.
3.) "...dabei soll abgefragt werden welche Punkte als sichtbar und unsichtbar definiert sind,
die entsprechenden Ebenen sollen dann eingeblendet oder ausgeblendet werden..."
Das ist nun ein Punkt, den ich nicht so recht verstehe. Soll das menu im Anfangszustand über
die Hauptkategorien hinaus (teilweise oder vielleicht zur Gänze) bereits aufgeklappt sein ?
Wenn ja, wozu ?
4.) "...Ich bin nicht an einer komplett-Lösung interessiert..."
Ausgesprochen löblich (zumindest im allgemeinen), hier jedoch ein wenig hinderlich (für mich).
Für mich ist's meist einfacher, ein Stückchen code zu posten, als irgendwas verständlich zu
erklären. Aber ich probier's mal:
Stell Dir mal Dein gesamtes Menu als Schachtel vor, also menu = schachtel.
Diese Schachtel kann Dinge enthalten - und zwar im Falle eines menus genau
zwo verschiedene Arten von Dingen: 1.) einfache links, oder 2.) ein Ding, das
ebenfalls eine schachtel ist, eine kleinere zwar, aber immerhin eine, die
genau den gleichen Gesetzmäßigkeiten unterliegt wie die größere - und das im
Prinzip ad infinitum.
Jedes dieser Dinge hat einen Namen - die einfachen Dinge ( die links ), genauso
wie die andern, die schachteln.
Eine Struktur, die diesen Sachverhalt 1:1 abbildet, läßt sich in javascript
sehr schön in object-Notation darstellen.
Besagtes menu = schachtel ist nichts anderes als
Das kann man nun beliebig erweitern (in diesem Fall sollte man's auch geflissentlich tun):
var menu = { menu_1 : { link_1 : 'wissenswert.htm',
link_2 : 'das_wollen_Sie_auch_wissen.htm',
link_3 : 'und_das_wollen_Sie_ganz_bestimmt_wissen.htm',
link_4 : ['heinz', 'zwo', 'trullalla', 17],
menu_1_1 : { //usw.
},
menu_1_2 : { //usf.
}
},
menu_2 : { //etc.
},
menu_3 : { //pp.
}
}
Um nun auf irgendetwas zuzugreifen, sagst Du:
for ( var i in menu ) alert ( i + 'n' + menu[i] )
alert ( 'Bidääschään achtung jeds' )
for ( var i in menu.menu_1 ) alert ( i + 'n' + menu.menu_1[i] )
Ich hatte Deine function writeList als rekursive function geschrieben, damit
alle verschachtelten Ebenen erwischt werden ( man hangelt sich so lange durch
die Verschachtelungstiefen, bis es nix mehr zu hangeln gibt ).
Ein menu ist nun nichts anderes als eine event-gesteuerte rekursive function,
um's mal salopp zu formulieren - und das kannst Du im Beispiel aus dem andern
thread sehen (entweder werden tags erzeugt, oder der übergeordnete tag wird geleert).
Probleme, die bei der konkreten Umsetzung entstehen, haben eigentlich weniger
mit javascript zu tun, sondern, wie so oft, mit den unterschiedlichen Angewohnheiten
der diversen browser (insbesondere den Unterschieden in deren css-Auslegung).
Aufpassen mußt Du natürlich auch bei der Behandlung der verschiedenen events ( click,
oder mouseover-und out, usw.). Denn spätestens da mußt Du Dir sehr genau überlegen,
was denn im einzelnen infolge eines bestimmten events geschehen soll.
Das klingt jetzt notwendigerweise aweng nebulös, aber Du wolltest ja kein ausführliches
Beispiel. Also bin ich mal gespannt, wie's weitergeht.
gruß
matho