Usando template com renderização em JavaScript
Combine modelos com laços de JavaScript para criar listas dinâmicas.
Usando template com renderização em JavaScript é uma aula grátis de HTML Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de HTML Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de HTML Academy inclui 4 aulas no total.
O elemento de modelo
O elemento <template> contém HTML que não é renderizado até ser clonado e inserido pelo JavaScript. Seu conteúdo é inerte — os scripts não são executados, as imagens não são carregadas e os estilos não são aplicados — até que o modelo seja ativado.
Acesso ao conteúdo do modelo
O conteúdo do modelo reside em um DocumentFragment em template.content. Para usá-lo, clone o fragmento: const clone = template.content.cloneNode(true). O argumento true realiza uma clonagem profunda, incluindo todos os nós descendentes.
Renderização de instâncias do modelo
Personalize o clone antes de inseri-lo: faça uma consulta dentro do clone, defina o conteúdo de texto e adicione ouvintes de eventos. Em seguida, anexe-o ao DOM: container.appendChild(clone). Cada cloneNode() cria uma cópia independente — modifique uma sem afetar as outras.
const tmpl = document.getElementById("card-template");
function renderCard(data) {
const clone = tmpl.content.cloneNode(true);
clone.querySelector(".title").textContent = data.title;
clone.querySelector(".body").textContent = data.body;
container.appendChild(clone);
}Renderização de listas a partir de modelos
Combine modelos com Array.forEach ou Array.map para renderizar listas: para cada item nos dados, clone o modelo, preencha os valores e anexe o item a um container de lista. Esse padrão é semelhante ao de um framework, mas é construído com HTML e JavaScript padrão.
Modelo para linhas de tabela
Defina um <template> contendo um <tr> com células. Clone e preencha o modelo para cada linha de dados. Isso evita a concatenação de strings para gerar HTML — nenhum escape é necessário, pois você define textContent em vez de innerHTML.
A ativação do modelo é explícita
Os modelos nunca são renderizados automaticamente. Isso os torna seguros para armazenar fragmentos que serão renderizados condicionalmente: mostre um modelo de "nenhum resultado" somente quando a busca não retornar nada, um modelo de erro somente em caso de falha de rede e um esqueleto de carregamento durante a busca de dados.
Modelos aninhados
Um modelo pode conter outros modelos — os modelos aninhados permanecem inertes dentro do DocumentFragment do modelo externo. Isso permite hierarquias semelhantes às de componentes, nas quais um modelo externo clona e depois ativa os modelos internos conforme necessário.
Estilos com escopo em modelos
Os estilos dentro da tag <style> de um modelo não são aplicados ao documento — permanecem inertes até que o modelo seja instanciado e seu conteúdo seja movido para o DOM ativo. Isso permite que os modelos carreguem seus próprios estilos sem poluir a página.
Modelo vs innerHTML
A análise de innerHTML é um processamento síncrono de strings HTML — o HTML é analisado novamente a cada vez. template.cloneNode() copia uma árvore já analisada. Para renderizar repetidamente a mesma estrutura, clonar o modelo é mais rápido e evita riscos de XSS causados pela concatenação de strings.
Limitações da vinculação de dados
O elemento de modelo não possui vinculação de dados integrada — você precisa consultar e preencher manualmente cada clone. Para necessidades complexas de vinculação de dados, um framework ou uma biblioteca é mais apropriado. Os modelos são destinados a padrões simples de renderização manual, sem a sobrecarga de um framework.
Suporte dos navegadores
O elemento de modelo é compatível com todos os navegadores modernos (o IE11 tinha suporte parcial). Para ambientes que exigem suporte ao IE, use um polyfill que analise o conteúdo do modelo durante a inicialização. Em projetos modernos, use o modelo sem polyfill.
Verificação de conhecimento
Por que template.content.cloneNode(true) é preferível a innerHTML para renderização repetida?
Resumo
O elemento de modelo contém fragmentos de HTML inertes e previamente analisados. Clonar template.content cria instâncias independentes para a vinculação manual de dados. Com a atribuição de textContent (sem XSS), os modelos permitem renderização de listas semelhante à de frameworks, interfaces condicionais e padrões de HTML reutilizáveis usando apenas APIs padrão do navegador.
Perguntas Frequentes
A aula “Usando template com renderização em JavaScript” é grátis?
Sim — o texto completo de “Usando template com renderização em JavaScript” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de HTML Academy, atualize para CoddyKit PRO. O curso de HTML Academy inclui 4 aulas no total.
O que vou aprender em “Usando template com renderização em JavaScript”?
Combine modelos com laços de JavaScript para criar listas dinâmicas. Você pratica HTML Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar HTML Academy?
Nenhuma experiência prévia é necessária. HTML Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Usando template com renderização em JavaScript”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de HTML Academy?
Sim. Cada aula de HTML Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- O elemento template: conteúdo inerte
- Clonando modelos com cloneNode
- Usando template com renderização em JavaScript
- Modelos versus innerHTML: segurança