Hallo Thomas,
an das Problem erinnere ich mich (vgl. </archiv/2010/1/t194363/>). Wünschenswert wäre es gewesen, wenn Du nicht nur übernommen hättest, sondern Dir auch Gedanken um die Funktionalität gemacht hättest.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<style type="text/css">
ul {width:150px}
li {border:red 1px solid;background:#ddd}
a {display:block}
</style>
<title>
Test Document
</title>
<script type="text/javascript">
window.onload=menu;
function menu(){
// Untermenüs ausblenden
var l=document.getElementById('menu').getElementsByTagName('ul')
for(var i=0;i<l.length;i++){
l.item(i).style.display='none';
}
// onclick-Event Elementen verteilen
l=document.getElementById('menu').childNodes
// alle Elemente <li> erfassen und rekursif untersuchen
for(i=0;i<l.length;i++){
if(l.item(i).tagName && l.item(i).tagName.toLowerCase()=='li'){
setEvent(l.item(i))
}
}
}
function setEvent(e){
var l=(e.getElementsByTagName('ul').item(0)) ? e.getElementsByTagName('ul').item(0).childNodes : ''
if(l.length>0){
// onclick-Eventsetzen
//
// fals nicht auf IE 6 Rücksicht genommen werden muss
// sollte Folgendes durch
// e.setAttribute('onclick','show(this);return false;')
// ersetzt werden
e.onclick=function (){show(this);return false;}
e.style.background='red'
// Rekursion
for(var i=0;i<l.length;i++){
if(l.item(i).tagName && l.item(i).tagName.toLowerCase()=='li'){
setEvent(l.item(i))
}
}
}
// schwer war es nicht; der Teil fehlte Dir noch:
else{
e.onclick=function (){location.href=this.getElementsByTagName('a').item(0).href;return false;}
}
}
function show(e){
// onclick soll immer nur an einem Element Effekte haben
//
// Elemenent e ist nicht Listenpunkt 1. Ordnung
if(e.parentNode!=document.getElementById('menu')){
// es wurde noch nichts ausgeblendet oder eingeblendent
if(!document.getElementById('my_event')){
// per id wird Ein-/Ausblenden markiert
//
// auch hier wieder der IE-6-Hinweis (setAttribute())
e.id='my_event'
// ein- oder ausblenden
e.getElementsByTagName('ul').item(0).style.display=(e.getElementsByTagName('ul').item(0).style.display=='none') ? 'block' : 'none'
}
}
// Elemenent e ist Listenpunkt 1. Ordnung
else{
// es wurde bereits ein-/ausgeblendet
if(document.getElementById('my_event')){
// nicht mehr ein-/ausblenden
// da e 1. Ordung ist, muss für weitere
// onclick-Events die id gelöscht werden
document.getElementById('my_event').id=''
}
// Element 1. Ordnung wurde angeklickt
else{
l=e.getElementsByTagName('ul')
// Ausblenden aller Elemente
if(l.item(0).style.display=='block'){
for(i=0;i<l.length;i++){
l.item(i).style.display='none'
}
}
// Einblenden der Liste 2. Ordnung
else{
l.item(0).style.display='block'
}
}
}
}
</script>
</head>
<body>
<ul id="menu">
<li>
<a href="#">1. Menuitem</a>
</li>
<li>
<a href="#">2. Menuitem</a>
<ul>
<li><a href="#">1. Submenu</a></li>
<li><a href="#">2. Submenu</a></li>
</ul>
</li>
<li>
<a href="#">3. Menuitem</a>
<ul>
<li>
<a href="#">1. Submenu</a>
<ul>
<li><a href="http://de.selfhtml.org/">1. Subsubmenu</a></li>
<li><a href="http://de.selfhtml.org/#2">2. Subsub-menu</a></li>
</ul>
</li>
<li><a href="#">2. Submenu</a></li>
</ul>
</li>
<li>
<a href="#">4. Menuitem</a>
</li>
</ul>
</body>
</html>
Gruß aus Berlin!
eddi