HOWTO · JavaScript
Criar tabela usando JavaScript
Neste artigo, veremos como criar uma tabela com a ajuda do JavaScript.
Nesta página
Crie uma tabela HTML a partir de dados JavaScript construindo seus elementos com document.createElement(), definindo o texto das células com textContent e adicionando a tabela pronta a um contêiner da página com appendChild(). Essa abordagem é útil quando as linhas vêm de dados que mudam enquanto a página está em execução.
Estrutura de uma tabela HTML e elementos necessários
Uma tabela usa elementos aninhados para descrever seu conteúdo. O elemento table contém linhas (tr); cada linha contém células de cabeçalho (th) ou células de dados (td). Use th para uma célula que identifica uma linha ou coluna, e td para dados comuns. As células de cabeçalho não se limitam a thead: elas também podem identificar linhas no corpo da tabela.
Os elementos thead e tbody agrupam, respectivamente, as linhas de cabeçalho e as linhas do corpo. Eles facilitam a organização de tabelas maiores, mas não são obrigatórios em todas as tabelas. Um grupo tfoot pode conter linhas de resumo ou rodapé quando necessário. Em uma tabela pequena, a estrutura essencial é um table com suas linhas e células; acrescente elementos de agrupamento quando eles deixarem a estrutura mais clara.
Crie e preencha uma tabela com JavaScript
O exemplo abaixo cria uma linha de cabeçalho e duas linhas de dados. Ele monta uma tabela com três colunas — número, nome e empresa — e insere texto comum em cada célula usando textContent. Assim, os valores são tratados como texto, em vez de serem interpretados como HTML, o que é a opção mais segura por padrão para dados que podem incluir conteúdo fornecido pelo usuário.
O exemplo para navegador usa o DOM nativo e adiciona a tabela pronta a um elemento #table-container já existente. A demonstração separada em Node.js que vem depois usa um pequeno modelo semelhante ao DOM para mostrar a lógica de criação das linhas e suas contagens; ela não cria uma tabela visível no navegador.
Exemplo de página para navegador (salve como uma página HTML e abra-a em um navegador):
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
<!doctype html>
<html lang="en">
<body>
<div id="table-container"></div>
<script>
const container = document.getElementById("table-container");
const table = document.createElement("table");
const thead = document.createElement("thead");
const tbody = document.createElement("tbody");
const headings = ["No.", "Name", "Company"];
const records = [
["1", "James Clerk", "Netflix"],
["2", "Adam White", "Microsoft"]
];
const headerRow = document.createElement("tr");
for (const heading of headings) {
const cell = document.createElement("th");
cell.textContent = heading;
headerRow.appendChild(cell);
}
thead.appendChild(headerRow);
for (const record of records) {
const row = document.createElement("tr");
for (const value of record) {
const cell = document.createElement("td");
cell.textContent = value;
row.appendChild(cell);
}
tbody.appendChild(row);
}
table.appendChild(thead);
table.appendChild(tbody);
container.appendChild(table);
</script>
</body>
</html>
Execute este exemplo JavaScript autocontido:
class Element {
constructor(name) {
this.name = name;
this.children = [];
this.textContent = "";
}
appendChild(child) {
this.children.push(child);
return child;
}
}
const document = {
createElement(name) {
return new Element(name);
},
body: new Element("body")
};
const container = document.createElement("div");
container.id = "table-container";
document.body.appendChild(container);
const table = document.createElement("table");
const thead = document.createElement("thead");
const tbody = document.createElement("tbody");
const headings = ["No.", "Name", "Company"];
const records = [
["1", "James Clerk", "Netflix"],
["2", "Adam White", "Microsoft"]
];
const headerRow = document.createElement("tr");
for (const heading of headings) {
const cell = document.createElement("th");
cell.textContent = heading;
headerRow.appendChild(cell);
}
thead.appendChild(headerRow);
for (const record of records) {
const row = document.createElement("tr");
for (const value of record) {
const cell = document.createElement("td");
cell.textContent = value;
row.appendChild(cell);
}
tbody.appendChild(row);
}
table.appendChild(thead);
table.appendChild(tbody);
container.appendChild(table);
const tableElement = container.children[0];
const headerCells = tableElement.children[0].children[0].children;
const bodyRows = tableElement.children[1].children;
console.log(`${headerCells.length} headings, ${bodyRows.length} data rows`);
3 headings, 2 data rows
document.createElement() recebe o nome de um elemento como string e retorna um novo elemento. O código cria um tr para cada linha e, em seguida, adiciona células th ou td a ela. Cada célula é preenchida antes de sua linha ser inserida em thead ou tbody. Por fim, os grupos são inseridos na tabela, e a tabela é adicionada ao contêiner criado no início do exemplo.
Em uma página sob seu controle, o contêiner pode ser tão simples quanto <div id="table-container"></div>. No código do navegador, selecione esse elemento existente com document.getElementById("table-container") e adicione a ele a tabela pronta. Coloque o script depois do contêiner na página ou execute-o depois que o documento for carregado, para garantir que o elemento de destino já exista. Aplique a apresentação separadamente com CSS, por exemplo, definindo bordas e espaçamento interno para table, th e td; o JavaScript cria a estrutura e o conteúdo, enquanto o CSS controla a aparência.
Adicione a tabela ao DOM e verifique o resultado
Adicione a tabela pronta ao contêiner selecionado com container.appendChild(table). Isso insere a tabela dentro do contêiner e mantém o restante da página. Se a tabela precisar substituir o conteúdo existente, limpe esse conteúdo de forma explícita antes de adicioná-la; caso contrário, cada execução acrescentará outra tabela.
Para conferir o resultado, abra as ferramentas de desenvolvedor do navegador e inspecione o contêiner no painel Elements. Ele deve conter um table, com um thead contendo uma linha de três células th e um tbody contendo duas linhas com três células td cada. A tabela renderizada deve mostrar os cabeçalhos “No.”, “Name” e “Company”, seguidos de James Clerk / Netflix e Adam White / Microsoft. Esses rótulos e nomes permanecem em inglês no exemplo. Se a tabela não aparecer, confira o ID do contêiner e o momento em que o script é executado. Para valores de texto simples, continue usando textContent em vez de atribuir dados a innerHTML.