Newsgroup: it.comp.lang.javascript
Titolo: menu dinamici: evidenziare la voce corrente

Generalmente questo tipo di problematica, vale a dire evidenziare il
pulsantino di menù relativo alla scelta fatta dall'utente, lo gestisco
in php.
Mi chiedevo se non ci fosse un sistema semplice per gestirlo da
javascript.
<div id="menuBar">
	<ul class="menuNavigazione">
		<li><a href=.... onclick="(selectMenu(this)">link 1</a></li>
		<li><a href=.... onclick="(selectMenu(this)">link 2</a></li>
		<li><a href=.... onclick="(selectMenu(this)">link 3</a></li>
		<li><a href=.... onclick="(selectMenu(this)">link 4</a></li>
	</ul>
</div>
quello che vorrei fare, sull'onclick dei link, è di introdurre la
classe .voceCorrente nel tag <li> superiore.
Ad esempio cliccando sul link2 vorrei che risultasse come se l'hatml
fosse:
		<li class="voceCorrente"><a href=....
onclick="(selectMenu(this)">link 2</a></li>
		<li><a href=.... onclick="(selectMenu(this)">link 3</a></li>
poi cliccando sul link 3 la classe deve spostarsi sul link3 :
		<li><a href=.... onclick="(selectMenu(this)">link 2</a></li>
		<li class="voceCorrente"><a href=....
onclick="(selectMenu(this)">link 3</a></li>
io avrei risolto così:
function selectMenu(sender){
 	var help=sender.parentNode.parentNode;
 	for(i=0;i<help.childNodes.length;i++) {
 		if (help.childNodes[i].nodeName==="LI")
help.childNodes[i].className="";
 	}
 	sender.parentNode.className="voceCorrente";
}
la mia domanda è: "è una buona soluzione o ce ne sono altre migliori?"

 la mia domanda è: "è una buona soluzione o ce ne sono altre migliori?"
Se ci possono essere più menu nella stessa pagina, potresti salvarti
il riferimento precedente altrove, così eviti il ciclo. Se invece vi
è un unico menu, allora puoi usare l'id al posto della class:
	function selectMenu(sender){
		var nd = document.getElementById("menu-selected");
		if (nd)
 
nd.id
="";
 
sender.id
 = "menu-selected";
	}
Dato che l'id è univico.. et voilà. :)
-- 
~ Se i sintomi persistono, insultare il medico.

 Dato che l'id è univico.. et voilà. :)
Interessante come approccio, va solo corretto un riferimento in quanto
gestisco nel padre (
sender.parentNode.id
 = "menu-selectd";).
Sicuramente è più performante del mio, anche se oggi giorno
(purtroppo) non sono in molti a preoccuparsi della complessità
computazionale.
tnx

 tnx
De nada.
-- 
~ Always remember you're unique, just like everyone else.

 vena, passo la mano :)
se mi sai dire dove orientativamente dove andare a sbirciare, sono
curioso di vedere cosa si dice.
^_^

 curioso di vedere cosa si dice.
Negli archivi di questo NG. Mi ricordo che qualche intervento in
proposito l'ho già fatto, quindi se ne è già parlato. Il punto è
che rischi di affogare, nel mare di post scritti in tutti questi
anni, ma se proprio t'interessa.. beh, in bocca al lupo. :)
-- 
~ "Il semble que la perfection soit atteinte non quand il n'ya plus
rien à ajouter, mais quand il n'ya plus rien à retrancher"
(A. de Saint-Exupéry)

 anni, ma se proprio t'interessa.. beh, in bocca al lupo. :)
In verità ho già frugato un po' in giro ma ovviamente essendo
l'argomento troppo vasto è un po' difficile trovare quel che si
cerca... alla fine la complessità è un pò come il sale: ce nè sempre
dappertutto... poco o tanto che sia.
Mi interesserebbe, ad esempio, sapere se sia più performante
l'utilizzo della getElementById piuttosto che di una navigazione DOM
(parentNode, childNodes, etc) ma sono troppo pigro per mettermi li a
scrivere dei codici di test da cronometrare ^_^.
Poi è chiaro che facendo, come nell'esempio, il cambio di una classe/
id su un n piccolo e finito è quasi ridicolo porsi il problema.

 (parentNode, childNodes, etc) 
Come ti ho detto, oggi non sono molto in vena altrimenti
ne avrei parlato volentieri. Ma considera che dipende un
po' dal contesto, e dal codice di markup ovviamente.
Se poi si tratta navigare tramite DOM ma in un ciclo, va
da sé che è meno performante in linea generale.
E poi, non dimenticare, che di browser non ne esiste uno
solamente, e le performance variano incredibilmente.
-- 
~ "Le parole uccidono più delle pallottole.
Ma le pallottole arrivano prima."
(Raffaele Cutolo)