Newsgroup: it.comp.lang.javascript
Titolo: Nascondere <span>

Una pagina che contiene due blocchi di testo, dentro due <span> a 
separarli, e uno script finale che ne mostra uno a seconda del 
linguaggio preferito dal browser: sul pc ho due browser, Iceweasel 
settato sull'inglese come preferito, Midori sull'italiano.
 
Il mio scopo sarebbe quello di mostrare un blocco di testo o l'altro a 
seconda del linguaggio del browser, e se non esiste questo viene preso 
uno di default (in questo caso sotto, "en"). Il nome del titolo sta 
nell'array perche' il tutto viene generato da un programma.
 
Perche' mi mostra sempre l'inglese invece, anche nel titolo che dovrebbe 
venire modificato? Il linguaggio del browser viene riconosciuto, se 
decommento il document.write() lo vedo...
 
pagina live su 
http://tinyurl.com/c68furd
 
il body significativo della pagina sotto.... tia :-)
 
<span id='it0' class='it' style='display:none;'>
Testo in italiano.<br></span>
<span id='en1' class='en' style='display:none;'>
English text.<br></span>
<script>
   var mytitles=new Array(2);
     mytitles[1]='it Titolo italiano';
     mytitles[2]='en English title';
   var deflang='en';
   var mylang=window.navigator.language;
   //document.write(mylang);
   var tmp='';
   var mycaption='';
   if (mylang.indexOf('-') > 0) {
     mylang=mylang.slice(0,mylang.indexOf('-'));
   }
   var elems = document.getElementsByClassName(mylang);
   if (elems.length=0); {
       elems = document.getElementsByClassName(deflang); }
     for(var i=0; i<elems.length; i++)
     {elems[i].style.display='block';}
     for(var i=1; i<mytitles.length; i++)
       {  tmp=mytitles[i].slice(0,mytitles[i].indexOf(' '));
        mycaption=mytitles[i].slice(mytitles[i].indexOf(' ')+1,999);
        if (tmp=mylang) { document.title=mycaption;
        document.getElementById('mypagetitle').innerHTML=mycaption; }
       }
</script>

    if (elems.length=0); {
 
con "=" stai assegnando alla proprietà length il valore 0 ... ... ... ==
 

        if (tmp=mylang) 
 
Qui solito discorso di cui prima: non stai comparando, stai assegnando.
Se `mylang` ha un valore considerato "falso" (ovvero, ad esempio,
stringa vuota), il blocco relativo non verrà mai eseguito.
Alternativamente, se ha un qualsiasi altro valore, verrà eseguito
sempre, giacché sarebbe equivalente a:
 
    // assegna
    tmp = mylang;
 
    if (mylang) { // `true` se non è un valore "falsy"
        // do something
    }
 
Hope it helps.

 con "=" stai assegnando alla proprietà length il valore 0 ... ... ... ==
 
Considerando questi due errori, mi verrebbe da pensare che l'OP provenga
proprio dal basic. :) Comunque nelle vecchie-recenti versioni di VB gli
array partivano da 0. In entrambe le versioni potevi cambiare il valore
di default per definire la base usando "Option Base".
Prima che la Microsoft decidesse di invertire l'indice di base, era
praticamente considerato uno statement da avere a priori nel proprio
codice, assieme a "Option Explicit".
 
Son passati quasi due decenni, e sapere che nel mio cervello spreco
spazio importante per ricordare ancora queste cose un po' m'inquieta...
 

 con "=" stai assegnando alla proprietà length il valore 0 ... ... ... ==
 
Ci casco sempre :-) Corretto questo, pero', c'e' l'errore finale, il ";" 
dopo l'if che fa eseguire comunque le condizioni e riporta sempre tutto 
a deflang. Alla fine funziona, thx :-)
 

 Hope it helps.
 
E' stato preziosissimo... quello che sto facendo e' un generatore di 
pagine statiche tramite una applicazione, e quindi certi errori sono 
difficilmente spiegabili qui (per proseguire il flusso del programma 
senza troppe variazioni, devo mantenere un ordine che non sempre e' 
quello logico e corretto), pero' mi hai dato un sacco di suggerimenti e 
idee valide, senza parlare delle correzioni degli errori :-)

 spazio importante per ricordare ancora queste cose un po' m'inquieta...
 
:-) adesso che lo scrivi me lo ricordo anch'io, ma l'infanzia informatica 
la ho dimenticata quasi in toto.