Esta pequena função foi feita copiando parte do código encontrado no phpMyAdmin. Eu precisava colorir linhas de tabelas conforme o mouse passava por elas, e colorí-las também quando o usuário clicasse nelas.

No Javascript original do phpMyAdmin, o style com as cores de fundo das células estão dentro do <td>. Além disso, como todas as células tem a mesma cor de fundo, bastava pegar a cor do primeiro <td> e aplicá-la na linha inteira.

Como minhas definições de estilo estão dentro de arquivos .css, tive de mudar a maneira de pegá-las. E como algumas colunas possuíam cores de fundo, e outras não, criei uma matriz para guardar os valores originais. Então quando o usuário passa o mouse em um <tr> com esta função, as cores de fundo definidas no arquivo .css são armazenadas, e recuperadas quando o mouse deixa a linha.

As duas primeiras variáveis são as cores que aparecerão quando o mouse estiver sobre a linha (cor_onmouseover) e quando ela for clicada (cor_onmousedown). Por padrão, são respectivamente um verde-limão fosco e um laranja creme. Como podem ver, não manjo nada de dar nomes às cores hexadecimais ;)

Abaixo segue o Javascript:

JAVASCRIPT:
  1. cor_onmouseover = '#E7FFCE';
  2. cor_onmousedown = '#FFCC99';
  3.  
  4. coresOriginais = Array();
  5.  
  6. function destacarLinha(celula, linhaNumero, evento)
  7. {
  8.     var celulas_filhas = null;
  9.  
  10.     // Tenta pegar o <tr> ou sai se o navegador não conseguir
  11.     if (typeof(document.getElementsByTagName) != 'undefined') {
  12.         celulas_filhas = celula.getElementsByTagName('td');
  13.     } else if (typeof(celula.cells) != 'undefined') {
  14.         celulas_filhas = celula.cells;
  15.     } else {
  16.         return false;
  17.     }
  18.  
  19.     var celulas_filhas_qtd  = celulas_filhas.length;
  20.     // Loop em todos os <td>'s
  21.     for (c = 0; c <celulas_filhas_qtd; c++) {
  22.         var corAtual = null;
  23.         var corNova  = null;
  24.  
  25.         elemento = celulas_filhas[c];
  26.         // Tem que fazer esse if porque quando o CSS tá em arquivo externo é
  27.         // dessa maneira que pega a cor
  28.         // Ie 5+;
  29.         if (elemento.currentStyle) {
  30.             corAtual = elemento.currentStyle['backgroundColor'];
  31.             // Firefox, Moz
  32.         } else if (window.getComputedStyle) {
  33.             var elstyle = window.getComputedStyle(elemento, "")
  34.             corAtual = elstyle.getPropertyValue('background-color');
  35.         }
  36.  
  37.         // De RGB para Hexadecimal
  38.         if (corAtual.indexOf("rgb")>= 0) {
  39.             var rgbStr = corAtual.slice(corAtual.indexOf('(') + 1,
  40.             corAtual.indexOf(')'));
  41.             var rgbValues = rgbStr.split(",");
  42.             corAtual = "#";
  43.             var hexChars = "0123456789ABCDEF";
  44.             for (var i = 0; i <3; i++) {
  45.                 var v = rgbValues[i].valueOf();
  46.                 corAtual += hexChars.charAt(v/16) + hexChars.charAt(v%16);
  47.             }
  48.         }
  49.  
  50.         cor_index = linhaNumero + "_" + c;
  51.  
  52.         if (evento == 'over' && corAtual.toLowerCase() != cor_onmousedown.toLowerCase()) {
  53.             corNova  = cor_onmouseover;
  54.             coresOriginais[cor_index] = corAtual;
  55.         } else if (evento == 'click') {
  56.             if (corAtual.toLowerCase() == cor_onmousedown.toLowerCase()) {
  57.                 corNova = coresOriginais[cor_index];
  58.             } else {
  59.                 corNova = cor_onmousedown;
  60.             }
  61.         } else if (evento == 'out' && corAtual.toLowerCase() != cor_onmousedown.toLowerCase()) {
  62.             corNova = coresOriginais[cor_index];
  63.         }
  64.  
  65.         if (corNova) {
  66.             celulas_filhas[c].style.backgroundColor = corNova;
  67.         }
  68.     }
  69.  
  70.     return true;
  71. }

Para utilizar a função, faça assim:

HTML:
  1. <tr onmouseover="destacarLinha(this, 1, 'over');"  onmouseout="destacarLinha(this, 1, 'out');"  onmousedown="destacarLinha(this, 1, 'click');">

O primeiro argumento é o número da linha na tabela. Ele é necessário para que a função saiba retornar às cores originais. Aumente-o de um em um conforme as ocorrências de <tr>s.

Qualquer dúvida, comentem :)

  • Marcelo Benevides
    Cara! Parabens ótimo codígo!
  • gabriel
    nao consegui usar...
    como eu coloco esse codigo em um html e ver seu funcionamento... desculpe.. sou iniciante
  • inerte
    Olá Paulo,

    Restrição do tipo, alguma licença de uso? Nenhuma a mais, pode fazer o quê bem entender com o código :)
  • Parabéns! Ótimo script. Gostaria de saber se há alguma restrição no seu uso?
    Um abraço
blog comments powered by Disqus

Português flagItaliano flagCoreano flagChinês (simplificado) flagEnglish flagAlemâo flagFrancês flagEspanhol flag
Japonês flagÁrabe flagRusso flagHolandês flagBúlgaro flagTcheco flagCroata flagDinamarquês flag
Finlandês flagHindu flagPolonês flagRomeno flagSueco flagGrego flagNorueguês flag 
By N2H
96 DOLETAS de desconto na hospedagem Dreamhost!
Use o "PROMO CODE" INERCIA. LAMP com 20GB de espaço e 1TB de transferência.

Artigos relacionados

  • No Related Posts

Categories