Qual é o equivalente não-jQuery $(document).ready()
?
javascript
jquery
TIMEX
fonte
fonte
$(document).ready()
evento do jQuery sem usar nenhuma biblioteca, veja isso: stackoverflow.com/questions/1795089/…$(document).ready()
- books.google.com/… . Ele também usa aaddEvent
abstração de ligação evento escrito por Dean Edwards, o código de que também está no livro :)Respostas:
O bom
$(document).ready()
é que ele dispara anteswindow.onload
. A função de carregamento aguarda até que tudo seja carregado, incluindo imagens e ativos externos.$(document).ready
, no entanto, é acionado quando a árvore DOM está concluída e pode ser manipulada. Se você deseja obter o DOM pronto, sem o jQuery, verifique esta biblioteca. Alguém extraiu apenas aready
parte do jQuery. É agradável e pequeno e você pode achar útil:já está no Google Code
fonte
Isso funciona perfeitamente, da ECMA
O
window.onload
não é igual ao JQuery$(document).ready
porque$(document).ready
aguarda apenas a árvore DOM enquantowindow.onload
verifica todos os elementos, incluindo ativos e imagens externos.EDITAR : Adicionado IE8 e equivalente mais antigo, graças à observação de Jan Derk . Você pode ler a fonte desse código no MDN neste link :
Existem outras opções além de
"interactive"
. Vejo o link MDN para detalhes.fonte
document.addEventListener("DOMContentLoaded",function(){console.log(123)})
experimentá-lo agoraUma coisinha que eu montei
domready.js
Como usá-lo
Você também pode alterar o contexto em que o retorno de chamada é executado passando um segundo argumento
fonte
Agora que é 2018, aqui está um método rápido e simples.
Isso adicionará um ouvinte de evento, mas se ele já tiver sido acionado, verificaremos se o dom está em um estado pronto ou completo. Isso pode disparar antes ou depois do carregamento dos sub-recursos (imagens, folhas de estilo, molduras etc.).
Leituras adicionais
Atualizar
Aqui estão alguns ajudantes rápidos de utilitários que usam o ES6 Import & Export que eu escrevi e que também incluem o TypeScript. Talvez eu possa criar uma biblioteca rápida que possa ser instalada em projetos como uma dependência.
Javascript
TypeScript
Promessas
fonte
De acordo com http://youmightnotneedjquery.com/#ready, um bom substituto que ainda funciona com o IE8 é
melhorias : Pessoalmente, eu também verificaria se o tipo de
fn
é uma função. E como sugeriu a @elliottregan, remova o ouvinte do evento após o uso.O motivo pelo qual respondi tarde a essa pergunta é porque estava procurando por essa resposta, mas não a encontrei aqui. E acho que essa é a melhor solução.
fonte
Existe uma substituição baseada em padrões, DOMContentLoaded , suportada por mais de 90% dos navegadores, mas não o IE8 (portanto, abaixo do código usado pelo JQuery para suporte ao navegador) :
A função nativa do jQuery é muito mais complicada do que apenas window.onload, como mostrado abaixo.
fonte
DOMContentLoaded
eload
eventosaddEventListener
, e primeiro o acionamento remove os dois ouvintes, para que não sejam acionados duas vezes.Em simples baunilha JavaScript, sem bibliotecas? É um erro.
$
é simplesmente um identificador e é indefinido, a menos que você o defina.O jQuery define
$
como seu próprio "objeto tudo" (também conhecido comojQuery
para que você possa usá-lo sem entrar em conflito com outras bibliotecas). Se você não estiver usando o jQuery (ou alguma outra biblioteca que o defina),$
não será definido.Ou você está perguntando qual é o equivalente em JavaScript simples? Nesse caso, você provavelmente deseja
window.onload
, o que não é exatamente equivalente, mas é a maneira mais rápida e fácil de se aproximar do mesmo efeito no JavaScript vanilla.fonte
A maneira mais fácil nos navegadores recentes seria usar o GlobalEventHandlers apropriado , onDOMContentLoaded , onload , onloadeddata (...)
O evento DOMContentLoaded é acionado quando o documento HTML inicial tiver sido completamente carregado e analisado, sem aguardar folhas de estilo, imagens e sub-quadros para concluir o carregamento. Um carregamento de evento muito diferente deve ser usado apenas para detectar uma página totalmente carregada. É um erro incrivelmente popular usar o load em que DOMContentLoaded seria muito mais apropriado, portanto, tenha cuidado.
https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded
A função usada é um IIFE, muito útil neste caso, pois se aciona quando pronto:
https://en.wikipedia.org/wiki/Immedately-invoked_function_expression
É obviamente mais apropriado colocá-lo no final de qualquer script.
No ES6, também podemos escrevê-lo como uma função de seta:
O melhor é usar os elementos DOM, podemos esperar que qualquer variável esteja pronta, que aciona um IIFE com flecha.
O comportamento será o mesmo, mas com menos impacto na memória.
Em muitos casos, o objeto de documento também é acionado quando pronto , pelo menos no meu navegador. A sintaxe é muito boa, mas precisa de mais testes sobre compatibilidade.
fonte
O corpo onLoad também pode ser uma alternativa:
fonte