Logon.com.pt

por José Carlos Joaquim

Tabelas “às riscas” II – DOM Scripting / jQuery

Esta é a conclusão do anterior Tabelas “às riscas” I – HTML/PHP.

Para quem não leu, o resultado que se pretende alcançar é este:

Tabela

No post anterior falei em duas formas de alternar a cor de fundo das linhas de uma tabela de dados. A primeira, manualmente, atribuindo a class .odd às linhas ímpares, directamente no código HTML. Como esta solução se torna mais difícil à medida que o número de linhas vai aumentando, utilizei a versão PHP para obter o mesmo resultado, automaticamente, e com menor probabilidade da ocorrência de erros.

Neste artigo vamos utilizar os mesmos ficheiros base:

A diferença é que vamos utilizar DOM Scripting e a jQuery para obter o mesmo resultado.

DOM Scripting

O DOM, Document Object Model, especifica os elementos de um documento (HTML, XML, etc.) e as ligações entre eles. O DOM define os atributos de cada objecto e a forma como os mesmos podem ser manipulados. Vamos utilizar Javscript para manipular estes objectos e respectivos atributos. Voltaremos à definição de DOM noutro post.

O que precisamos de fazer é:

  • Certificar-nos que o método getElementsByTagName existe (se não existir, não faz nada, mas também não dá erro;
  • Obter todos os elementos tabela (table) do documento;
  • Para cada tabela, criar uma variável, boleana, odd com um estado de falso;
  • Iterar por todos as linhas da tabela;
  • Se o estado da variável odd for falso, não aplicar nenhum estilo, mas alterar o estado da variável para verdadeiro;

Para podermos utilizar a função sempre que quisermos e para que ela não seja executada sem que a página estaja toda carregada, podendo originar erros, vamos criar uma função chamada stripes().

function stripes() {
if (!document.getElementsByTagName) return false;
var tables = document.getElementsByTagName("table");
for (var i=0; i
<tables.length;></tables.length;>var odd = false;
var rows = tables[i].getElementsByTagName("tr");
for (var j=0; j<rows.length;>
if (odd == true) {
rows[j].className = "odd";
odd = false;
} else {
odd = true;
}
}
}
}</rows.length;>

Agora que temos a função pronta, só precisamos de a executar. Para isso utilizamos o evento window.onload que garante que o código dentro dele só é executado quando o documento estiver totalmetne carregado, evitando alguns erros. Ficará assim:
window.onload = function() {
stripes();
}

Finalmente, basta guardar o código acima num ficheiro stripes-dom.js (escolham o nome que quiserem claro) e chamá-lo no cabeçalho da página da seguinte forma:
<script src="stripes-dom.js" type="text/javascript"></script>
Ver resultado utlizando DOM Scripting.
Assim temos o resultado pretendido, sem adiccionar código nenhum à tabela (o que nem sempre é possível). Caso o utilizador tenha o javascript desactivado, o efeito perde-se, ficando a tabela sem nenhuma alteração, mas igualmente legível.

jQuery

Obter o mesmo efeito utilizando a jQuery – uma biblioteca javascript – é extremamente simples.
Primeiro, fazemos o download da jQuery; depois, “chamamos” o ficheiro na nossa página:
<script src="jquery-latest.pack.js" type="text/javascript"></script>
Temos agora à disposição um sem fim de recursos que jQuery disponibiliza. Vamos utilizar um deles para obter todas as tabelas do documento, depois, para cada tabela, aplicar a class odd às linhas ímpares.
Se, e só neste caso, o nosso documento tiver uma tabela podemos utilizar:
$("tr:odd").addClass("odd");
O que a linha anterior faz é obter todas as linhas (tr) ímpares de todas as tabelas e atribuir-lhe a class odd. Convém utilizar esta forma apenas em documentos com uma única tabela, pois, por exemplo, se a primeira tabela tiver 7 linhas, a linha que vai ser alterada na tabela seguinte é a segunda, já que ele conta todas as linhas, não fazendo distinção em que tabela estas se encontram.
Para que o resultado seja o desejado teremos de utilizar:
$("tr:nth-child(odd)").addClass("odd");
A linha anterior usa a pseudo-class, nth-child, que permite manipular as linhas de uma dada tabela, podendo aceitar argumentos como odd e even, que, respectivamente correspondem a linhas ímpares e pares. Para mais propriedades, vejam a especificação do W3C.
Agora só precisamos de fazer com que a função seja chamada quando o documento é carregado. Da seguinte forma:
$(document).ready(function() {
$("tr:nth-child(odd)").addClass("odd");
});

Basta guardar estas linhas num ficheiro, por exemplo stripe-jquery.js e incluir na nossa página a linha correspondente:
<script src="stripe-jquery.js" type="text/javascript"></script>
E está feito. Mais rápido, mais simples e com bastante menos linhas que os restantes métodos.
Ver resultado com jQuery.

Conclusão

Cada um dos quatro métodos referidos, apesar do mesmo objectivo, tem aplicações diferentes. Os dois primeiros, HTML e PHP+HTML, funcionam quando se tem acesso à criação do nosso alvo, as tabelas, e julgo serem os mais utilizados. Os dois últimos, DOM Scripting e jQuery, funcionam quando não se pode modificar os dados-alvo, as tabelas, mas falham quando o utilizador desactivou o javascript no seu browser. De referir que, caso as folhas de estilo (CSS) estejam desactivadas, qualquer um destes métodos falha.

Brevemente vou voltar a utilizar esta última tabela com outros objectivos. A idéia já cá está, falta escrever.

Comentários

  1. Ricardo20 de October de 2007

    Caro,
    gostei do website(/blog?) e do conteúdo. Ainda agora fui apresentado ao jQuery e estou a gostar. Proponho-te que revejas alguns ‘typos’ e aquela palavra ‘libraria’ é muito feia – a palavra inglesa Lybrary significa Biblioteca. É muito mais bonito.
    Saúde

  2. José Carlos20 de October de 2007

    :D Obrigado pelo reparo. Julgo que este é o único post em que falo de libraria em vez de biblioteca. Alterado o termo.
    Dá uma vista de olhos em: jQuery UI.

Os comentários para este artigo estão fechados.

Sobre o autor

Olá, chamo-me José Carlos Joaquim e sou iOS e Ruby Developer em Paris. Este é o meu site pessoal.

mais sobre mim…

Categorias