Ecco un'ulteriore soluzione:
Ti ho modificato leggermente il mark-up, proponendoti una soluzione che trovo più appropriata dal punto di vista semantico.codice:XHTML <ul id="menu">[*] <span>Verdura</span> <ul>[*]Pomodori[*]Carote[/list] [*] <span>Frutta</span> <ul>[*]Mele[*]Pere[/list] [/list] CSS .menu_nascosto { position:absolute; top:-100px; width:1px; height:1px; overflow:hidden; } .menu_titolo { color:blue; text-decoration:underline; cursor:pointer; } Javascript window.onload = function() { // Prepariamo tutti gli attori dello script var menu = document.getElementById('menu') var menu_elementi = menu.childNodes var sotto_menu = new Array() for (var i = 0; i < menu_elementi.length; i++) { if ( menu_elementi.item(i).nodeType == menu_elementi.item(i).ELEMENT_NODE ) { sotto_menu.push(menu_elementi.item(i)) } } var sotto_menu_titoli = new Array() for (var i = 0; i < sotto_menu.length; i++) { var titolo_corrente = sotto_menu[i].getElementsByTagName('span').item(0) sotto_menu_titoli.push(titolo_corrente) } var sotto_menu_voci = new Array() for (var i = 0; i < sotto_menu.length; i++) { var voci_corrente = sotto_menu[i].getElementsByTagName('ul').item(0) sotto_menu_voci.push(voci_corrente) } // Prepariamo le funzioni 'visualizza' e 'nascondi' function nascondi_menu(indice, menu_corrente) { sotto_menu_voci[indice].className = 'menu_nascosto' menu_corrente.onclick = function() { visualizza_menu(indice, menu_corrente) } } function visualizza_menu(indice, menu_corrente) { sotto_menu_voci[indice].className = ' ' menu_corrente.onclick = function() { nascondi_menu(indice, menu_corrente) } } // Attribuiamo le funzioni ad ogni sotto-menu var indice_menu = 0 for (var i = 0; i < sotto_menu_titoli.length; i++) { sotto_menu_titoli[i].onclick = function() { visualizza_menu(indice_menu, this) indice_menu++ } } // Rendiamo visivamente simili a link i titoli cliccabili dei sotto-menu for (var i = 0; i < sotto_menu_titoli.length; i++) { sotto_menu_titoli[i].className = 'menu_titolo' } // Inizializziamo la pagina nascondendo tutti i sotto-menu for (var i = 0; i < sotto_menu_voci.length; i++) { sotto_menu_voci[i].className = 'menu_nascosto' } }
Da notare come questo script javascript funzioni con un numero arbitrario di sotto-menu in quanto non serve andare ad inserire attributi di evento o altre porcherie nella marcatura.

 
			
			 
					
					
					
						 Rispondi quotando
  Rispondi quotando