Non capisco perchè vi ostinate a usare javascript in questo modo e a trattare il markup con così poco rispetto. Mi spiego.

Innanzitutto, una soluzione come quella presentata a inizio discussione presenta un grave errore concettuale: in caso di javascript disattivato, infatti, la tabella non viene visualizzata. E' una perdita di informazione inammissibile.

Secondo, per gestire la grafica di un documento web hanno inventato i CSS: perchè non sfruttarli? Sono lì apposta.

In ultimo, homezappa propone di usare l'attributo rel per salvare il colore originario, quando tale attributo ha ben altri fini, scopi e motivazioni.

Per prima cosa direi di scrivere la tabella direttamente nella struttura di markup della pagina:

codice:
<table id="voti">
   <caption>
      I voti della classe 1A.
   </caption>
   <thead>
      <tr>
         <th scope="col">Allievo</th>
         <th scope="col">Voto</th>
      </tr>
   </thead>
   <tbody>
      <tr>
         <td>Aldo</td>
         <td>10</td>
      </tr>
      <tr>
         <td>Bruno</td>
         <td>8.5</td>
      </tr>
      
   </tbody>
</table>
Poi preparerei delle classi CSS per dare i colori alle righe:

codice:
.riga_pari
{
   background-color:#CCC;
}
.riga_dispari
{
   background-color:#DDD;
}
.riga_pari_hover
{
   background-color:#DDE;
}
.riga_dispari_hover
{
   background-color:#CDCDF7;
}
Infine, con un javascript non intrusivo, andiamo ad assegnare le classi ai vari elementi della tabella:

codice:
window.onload = function()
{
   var tabella = document.getElementById('voti')
   var tabella_corpo = tabella.getElementsByTagName('tbody').item(0)
   var righe = tabella_corpo.getElementsByTagName('tr')

   for (var i = 0; i < righe.length; i++)
   {
      if ( i % 2 )
      {
         righe.item(i).className = 'riga_pari'
      }
      else
      {
         righe.item(i).className = 'riga_dispari'
      }
   }

   for (var i = 0; i < righe.length; i++)
   {
      righe.item(i).onmouseover = function()
      {
         if ( i % 2 )
         {
            righe.item(i).className = 'riga_pari_hover'
         }
         else
         {
            righe.item(i).className = 'riga_dispari_hover'
         }
      }

      righe.item(i).onmouseout = function()
      {
         if ( i % 2 )
         {
            righe.item(i).className = 'riga_pari'
         }
         else
         {
            righe.item(i).className = 'riga_dispari'
         }
      }
   }
}
Se javascript viene disattivato, le informazioni sono comunque accessibili. Per la grafica abbiamo usato lo strumento appropriato. Abbiamo rispettato il markup lasciandogli fare il suo lavoro, senza inquinarlo con elementi superflui o addirittura usati in modo inappropriato.

Ma son pirla io, o mi sembra davvero un modo di lavorare più intelligente e pulito?