Criar elemento HTML com JavaScript (appendChild e innerHTML)
Neste artigo você vai aprender a como criar elemento HTML com JavaScript e também as diferenças dos métodos appendChile innerHTML
Pra criar um elemento HTML com JavaScript você usa o método document.createElement(‘tag’), define o conteúdo dele com textContent (quando é só texto) ou innerHTML (quando você precisa que a string seja interpretada como HTML) e insere na página com appendChild() ou append()
Exemplo mínimo: const p = document.createElement(‘p’) p.textContent = ‘Testando’ document.body.appendChild(p)
Regra rápida: appendChild constrói e anexa só aquele nó, então tende a ser mais performático em inserções pontuais innerHTML reparseia e recria todos os nós de dentro do elemento, é ótimo quando você quer substituir o conteúdo por um bloco de HTML, mas cuidado ao usar com dado vindo do usuário por causa de XSS
Fala programador(a), tudo bem? Bora aprender mais sobre criação de elementos e DOM em JavaScript!
Primeiramente vamos abordar a criação de elemento via DOM para ser representado no HTML
Para criar um elemento devemos utilizar o método createElement, com a tag como parâmetro
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
E também inserir um texto nele com a propriedade textContent
Veja um exemplo prático:
const paragrafo = document.createElement("p");
const texto = document.createTextNode("Testando");
paragrafo.appendChild(texto);
console.log(paragrafo);Desta forma você terá um elemento p criado pelo JavaScript
É interessante também entender que o objeto document sempre será utilizado na manipulação de DOM, pois ele contem todos os métodos para estas implementações
E para inserir no HTML?
Aqui vai a grande questão, utilizar appendChild ou innerHTML?
Utilizando o appendChild você terá uma operação mais performática, pois ele não reconstrói o DOM completamente
Já o innerHTML causa a reconstrução completa do elemento, pois este método exerce uma substituição de todos os elementos
Logo, se você busca performance utilize o append, porém se a intenção for realmente substituir tudo você deve optar pelo innerHTML
Veja um exemplo com appendChild:
const body = document.body; body.appendChild(paragrafo);
Aqui reaproveitamos o código da outra etapa da criação, apenas selecionamos o body e inserimos o elemento com appendChild
Agora veja um exemplo com innerHTML:
const body = document.body; body.innerHTML += paragrafo.innerHTML;
Aqui a situação muda um pouco, temos que acessar a propriedade innerHTML tanto do body quanto do elemento que criamos
E aí sim adicionar o mesmo ao elemento
Conclusão
Neste artigo vimos como criar elemento HTML com JavaScript
Para isso utilizamos o método createElement de document
E também uma comparação do método appendChild com innerHTML, que como digo anteriormente o método append tem mais performance para inserir elementos e deve ser optado, se este é o requisito do sistema
Confira também nosso catálogo de cursos gratuitos, com aulas semanais no YouTube
Adicionar um subtítulo ‘appendChild ou innerHTML: qual é mais rápido?’ explicando de forma qualitativa que não existe vencedor absoluto, depende do uso: em modificação única, createElement + appendChild tende a ser mais performático, porque o innerHTML reparseia e recria todos os nós internos do elemento a cada vez que você seta ele. Fazer innerHTML += dentro de um loop é péssimo, mas montar uma string temporária e atribuir o innerHTML uma vez só tem desempenho parecido ou até melhor. E pra inserir MUITOS elementos de uma vez, o recomendado é usar DocumentFragment, que junta tudo e faz um append só
Explicar que o innerHTML é um ponto de injeção (injection sink) e vira vetor de XSS quando o valor vem de entrada não confiável do usuário, porque ele parseia a string como HTML. Vale o aviso: mesmo o HTML5 impedindo que uma tag <script> inserida via innerHTML seja executada, ainda dá pra abusar de coisas como o atributo onerror de uma <img>. Quando você só quer inserir TEXTO, o certo é usar textContent, que insere o valor como texto puro, não é parseado como HTML e por isso previne o XSS
Incluir uma nota rápida sobre a diferença entre append() e appendChild(): o appendChild() aceita só um objeto Node por vez e retorna o nó anexado, enquanto o append() aceita nós E strings de texto, permite passar vários itens numa mesma chamada e não devolve valor de retorno. Um mini exemplo de append(‘texto’) ajuda
Adicionar uma seção de Perguntas Frequentes com as dúvidas que aparecem na SERP (diferença appendChild x innerHTML, segurança do innerHTML, append x appendChild, innerHTML x textContent/innerText). Conteúdo detalhado no campo geo.faq
Num vídeo da playlist de JavaScript aqui do canal eu montei uma div e testei os dois lado a lado pra ver a diferença acontecer na prática
Quando joguei uma tag de título via innerHTML, o navegador renderizou ela como HTML de fato, virou um cabeçalho na página
Já com a versão que insere só texto, a mesma tag apareceu como texto cru na tela, sem ser interpretada
A lição que fica é essa: se você quer que a string vire HTML, innerHTML se é só texto, textContent resolve, é mais seguro e mais performático
Perguntas frequentes
Qual a diferença entre appendChild e innerHTML?
O appendChild constrói e anexa apenas aquele nó específico ao elemento
Já o innerHTML, quando você seta ele, reparseia a string e recria TODOS os nós que estão dentro do elemento
Por isso o appendChild costuma ser mais performático numa modificação pontual, e o innerHTML é mais prático quando a intenção é jogar um bloco de HTML de uma vez
Qual a diferença entre append() e appendChild()?
O appendChild() aceita só um objeto Node por vez e retorna o nó que foi anexado
O append() é mais flexível: aceita nós E strings de texto, deixa você passar vários itens numa só chamada, mas não tem valor de retorno
Então se você quer inserir um texto direto, append(‘meu texto’) resolve, enquanto o appendChild exigiria criar um nó de texto antes
innerHTML é seguro de usar?
Depende de onde vem o valor
O innerHTML é um ponto de injeção: ele parseia a string como HTML, então vira porta de XSS quando o conteúdo vem de entrada não confiável do usuário
O HTML5 impede que uma <script> inserida via innerHTML seja executada, mas ainda dá pra explorar coisas como o onerror de uma <img>
Quando você só precisa inserir texto, use textContent, que insere como texto puro e não é interpretado como HTML
innerHTML ou appendChild: qual é mais rápido?
Não tem vencedor fixo, depende do uso
Numa modificação única, createElement + appendChild tende a ser mais rápido, porque o innerHTML recria todos os nós internos
Concatenar com innerHTML += dentro de um loop é ruim, mas montar uma string temporária e atribuir o innerHTML uma vez só tem desempenho parecido ou melhor
Pra inserir muitos elementos de uma vez, o recomendado é usar DocumentFragment
Qual a diferença entre innerHTML e textContent (ou innerText)?
O innerHTML interpreta a string como HTML, então se você passar uma tag ela é renderizada de verdade
O textContent insere o valor como texto puro, sem parsear nada como HTML
Além de prevenir XSS, o textContent também é mais performático que o innerHTML quando o objetivo é só colocar texto
Leia também
Formações
Formação SAAS com IA
Tire usas ideias do papel criando softwares com IA, integre pagamentos e lance seu projeto!
- 291 aulas
- 18 projetos
- 24h 17min
Blog | Mais populares

As diferenças de var, let e const

Como fazer redirecionamento com PHP
Neste artigo você vai aprender a como fazer redirecionamento com PHP, utilizaremos abordagens fáceis de entender e de aplicar Fala programador(a), beleza? Bora aprender mais […]

ChatGPT: o que é, como usar, dicas e como acessar login
ChatGPT é uma ferramenta de processamento de linguagem natural (NLP) baseada na arquitetura GPT-3.5, desenvolvida pela OpenAI. Sua criação representa um marco significativo no campo […]


eu posso tb adicionar outros parâmetros a essa nova tag tipo “onclick”, style e tals?