Equivalente a $(document).ready em JavaScript puro
Neste artigo você vai aprender uma função equivalente a $(document).ready em JavaScript puro, ou seja, sem depender de bibliotecas como jQuery

Fala programador(a), beleza? Bora aprender mais sobre JavaScript e também carregamento de págia e DOM!
Para simular o efeito de $(document).ready com JS Vanilla podemos adicionar um evento ao DOM
Utilizaremos então document, e o método addEventListener
O evento será DOMContentLoaded, que ativa apenas quando o DOM é carregado
Ou seja, tem a mesma função da inicialização do jQuery, legal né?
Veja um exemplo prático de aplicação da solução:
document.addEventListener("DOMContentLoaded", function(e) {
// Aqui vai o seu código
});Veja que dentro do evento é incluida uma função anônima
Dentro desta função colocaremos todo o código que precisa ser executado após o carregamento de DOM
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Ou seja, após disparar o evento DOMContentLoaded!
E apenas com esta linha de código atingimos o efeito da função ready
Desta maneira você não precisa se incomodar mais com desencontro de JavaScript sendo executado, mediante a necessidade de algum elemento de HTML em particular
Evitando erros que podem acontecer na execução da sua aplicação, caso os elementos não estivessem presentes, o que é um problema bem comum
Ainda mais com o desuso de jQuery, programadores apelam as vezes para o setTimeout, o que é uma má prática
Pois não sabemos as condições adversas que podem acontecer devido a internet ou processamento do computador do usuário
Conclusão
Neste artigo você aprendeu a como criar uma função equivalente a $(document).ready em JavaScript vanilla
Utilizamos um evento de DOM por meio de document e addEventListener, o evento é chamado de DOMContentLoaded
E o mesmo é disparado após o completo carregamento do DOM da página, evitando assim erros de execução de script
Confira também nosso catálogo de cursos gratuitos, com aulas semanais no YouTube
$(document).ready e $(function(){}) são a mesma coisa?
Se você veio do jQuery, provavelmente escrevia de uma dessas duas formas
$(document).ready(function() {
// seu código
});
$(function() {
// seu código
});As duas fazem a mesma coisa, a segunda é só um atalho da primeira
E as duas viram a MESMA linha em JavaScript puro:
document.addEventListener("DOMContentLoaded", function() {
// seu código
});Tome cuidado com a escrita: $document.ready, sem os parênteses, não existe
O certo é $(document).ready, com o document dentro dos parênteses do $
Então se você copiou de algum lugar e nada acontece, olha os parênteses primeiro 🙂
DOMContentLoaded ou window.onload? Qual usar:
Os dois esperam a página, só que não esperam a mesma coisa
O DOMContentLoaded dispara assim que o HTML termina de ser lido e o DOM está montado
Já o evento load do window espera TUDO: imagens, iframes, folhas de estilo e por aí vai
// dispara antes: DOM montado
document.addEventListener("DOMContentLoaded", function() {
console.log("DOM pronto");
});
// dispara depois: página inteira carregada
window.addEventListener("load", function() {
console.log("tudo carregado, imagens inclusive");
});Na prática: se seu código só precisa pegar elemento, mexer em classe, colocar listener em botão, o DOMContentLoaded é o que você quer
Se você precisa da altura ou da largura real de uma imagem, aí sim vale esperar o load
É a diferença entre "a estrutura existe" e "tudo terminou de baixar", beleza?
E se o script rodar depois do DOM já estar pronto?
Aqui mora um erro clássico, e já me ferrei com ele
Se o seu script é carregado tarde (com async, injetado por outro script, colado lá no fim da página), o DOMContentLoaded pode já ter disparado
E evento que já passou não volta: seu callback simplesmente não roda, sem nenhum erro no console 😬
A saída é olhar o estado do documento ANTES de assinar o evento:
function aoCarregar(callback) {
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", callback);
} else {
callback();
}
}
aoCarregar(function() {
// seu código aqui, rodando em qualquer cenário
});Traduzindo: se o documento ainda está sendo lido (loading), a gente espera o evento
Se já passou disso, chama a função na hora
Essa versão é a mais segura pra reaproveitar em projeto, porque não depende de onde a tag script foi parar
Perguntas frequentes:
Preciso do jQuery só pra usar o ready?
Não, o document.addEventListener("DOMContentLoaded", ...) resolve esse caso sem nenhuma biblioteca instalada
Posso ter mais de um DOMContentLoaded na mesma página?
Pode, e é bem comum: o addEventListener acumula, então cada arquivo ou trecho pode registrar o seu, e todos são executados na ordem em que foram registrados
O atributo defer substitui o DOMContentLoaded?
Colocar defer na tag do script faz o navegador executar o arquivo só depois de ler o HTML, o que já resolve boa parte dos casos
<script src="app.js" defer></script>O DOMContentLoaded continua útil quando o código é inline ou quando você não controla como o script entra na página
Por que meu getElementById volta null?
Na maioria das vezes é script rodando antes do elemento existir
Joga esse trecho pra dentro do DOMContentLoaded e o problema some
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 […]
