Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

680
Views
JavaScript puro equivalente a $.ready() de jQuery: cómo llamar a una función cuando la página/DOM está lista para ello

Con jQuery, todos conocemos la maravillosa función .ready() :

 $('document').ready(function(){});

Sin embargo, digamos que quiero ejecutar una función que está escrita en JavaScript estándar sin una biblioteca que la respalde, y que quiero iniciar una función tan pronto como la página esté lista para manejarla. ¿Cuál es la forma correcta de abordar esto?

Sé que puedo hacer:

 window.onload="myFunction()";

O puedo usar la etiqueta del body :

 <body onload="myFunction()">

O incluso puedo probar en la parte inferior de la página después de todo, pero el body final o la etiqueta html como:

 <script type="text/javascript"> myFunction(); </script>

¿Qué es un método compatible con varios navegadores (antiguo/nuevo) para emitir una o más funciones de una manera similar a $.ready() de jQuery?

over 4 years ago · Santiago Trujillo
9 answers
Answer question

0

Aquí hay una versión limpia, sin uso de evaluación, de la variedad "funciona en todos los navegadores" de Ram-swaroop: ¡funciona en todos los navegadores!

 function onReady(yourMethod) { var readyStateCheckInterval = setInterval(function() { if (document && document.readyState === 'complete') { // Or 'interactive' clearInterval(readyStateCheckInterval); yourMethod(); } }, 10); } // use like onReady(function() { alert('hello'); } );

Sin embargo, espera 10 ms adicionales para ejecutarse, así que aquí hay una forma más complicada que no debería:

 function onReady(yourMethod) { if (document.readyState === 'complete') { // Or also compare to 'interactive' setTimeout(yourMethod, 1); // Schedule to run immediately } else { readyStateCheckInterval = setInterval(function() { if (document.readyState === 'complete') { // Or also compare to 'interactive' clearInterval(readyStateCheckInterval); yourMethod(); } }, 10); } } // Use like onReady(function() { alert('hello'); } ); // Or onReady(functionName);

Consulte también ¿Cómo verificar si DOM está listo sin un marco? .

over 4 years ago · Santiago Trujillo Report

0

No estoy muy seguro de lo que estás preguntando, pero tal vez esto pueda ayudar:

 window.onload = function(){ // Code. . . }

O:

 window.onload = main; function main(){ // Code. . . }
over 4 years ago · Santiago Trujillo Report

0

Si está haciendo JavaScript sin formato VANILLA sin jQuery, entonces debe usar (Internet Explorer 9 o posterior):

 document.addEventListener("DOMContentLoaded", function(event) { // Your code to run since DOM is loaded and ready });

Arriba está el equivalente de jQuery .ready :

 $(document).ready(function() { console.log("Ready!"); });

Que TAMBIÉN podría escribirse de forma abreviada así, que jQuery ejecutará después de que ocurra el evento ready.

 $(function() { console.log("ready!"); });

NO CONFUNDIRSE con ABAJO (que no está destinado a estar listo para DOM):

NO use un IIFE como este que es autoejecutable:

 Example: (function() { // Your page initialization code here - WRONG // The DOM will be available here - WRONG })();

Este IIFE NO esperará a que se cargue tu DOM. (¡Incluso estoy hablando de la última versión del navegador Chrome!)

over 4 years ago · Santiago Trujillo Report

0

Listo

 function ready(fn){var d=document;(d.readyState=='loading')?d.addEventListener('DOMContentLoaded',fn):fn();}

usar como

 ready(function(){ //some code });

Para código de autoinvocación

 (function(fn){var d=document;(d.readyState=='loading')?d.addEventListener('DOMContentLoaded',fn):fn();})(function(){ //Some Code here //DOM is avaliable //var h1s = document.querySelector("h1"); });

Soporte: IE9+

over 4 years ago · Santiago Trujillo Report

0

Me gustaría mencionar algunas de las formas posibles aquí junto con un truco de javascript puro que funciona en todos los navegadores :

 // with jQuery $(document).ready(function(){ /* ... */ }); // shorter jQuery version $(function(){ /* ... */ }); // without jQuery (doesn't work in older IEs) document.addEventListener('DOMContentLoaded', function(){ // your code goes here }, false); // and here's the trick (works everywhere) function r(f){/in/.test(document.readyState)?setTimeout('r('+f+')',9):f()} // use like r(function(){ alert('DOM Ready!'); });

El truco aquí, como lo explicó el autor original , es que estamos verificando la propiedad document.readyState . Si contiene la cadena (como in uninitialized y loading , los primeros dos estados DOM listos de 5), establecemos un tiempo de espera y verificamos nuevamente. De lo contrario, ejecutamos la función pasada.

Y aquí está el jsFiddle para el truco que funciona en todos los navegadores.

Gracias a Tutorialzine por incluir esto en su libro.

over 4 years ago · Santiago Trujillo Report

0

La buena gente de HubSpot tiene un recurso donde puede encontrar metodologías Javascript puras para lograr muchas de las bondades de jQuery, incluso ready

http://es posible que no necesite jquery.com/#ready

 function ready(fn) { if (document.readyState != 'loading'){ fn(); } else if (document.addEventListener) { document.addEventListener('DOMContentLoaded', fn); } else { document.attachEvent('onreadystatechange', function() { if (document.readyState != 'loading') fn(); }); } }

ejemplo de uso en línea:

 ready(function() { alert('hello'); });
over 4 years ago · Santiago Trujillo Report

0

document.ondomcontentready=function(){} debería funcionar, pero no tiene compatibilidad total con el navegador.

Parece que deberías usar jQuery min

over 4 years ago · Santiago Trujillo Report

0

Su método (colocar el script antes de la etiqueta del cuerpo de cierre)

 <script> myFunction() </script> </body> </html>

es una forma confiable de admitir navegadores antiguos y nuevos.

over 4 years ago · Santiago Trujillo Report

0

Probado en IE9 y los últimos Firefox y Chrome y también compatible con IE8.

 document.onreadystatechange = function () { var state = document.readyState; if (state == 'interactive') { init(); } else if (state == 'complete') { initOnCompleteLoad(); } }​;

Ejemplo: http://jsfiddle.net/electricvisions/Jacck/

ACTUALIZACIÓN - versión reutilizable

Acabo de desarrollar lo siguiente. Es un equivalente bastante simplista de jQuery o Dom ready sin compatibilidad con versiones anteriores. Probablemente necesite más refinamiento. Probado en las últimas versiones de Chrome, Firefox e IE (10/11) y debería funcionar en navegadores más antiguos como se comentó. Actualizaré si encuentro algún problema.

 window.readyHandlers = []; window.ready = function ready(handler) { window.readyHandlers.push(handler); handleState(); }; window.handleState = function handleState () { if (['interactive', 'complete'].indexOf(document.readyState) > -1) { while(window.readyHandlers.length > 0) { (window.readyHandlers.shift())(); } } }; document.onreadystatechange = window.handleState;

Uso:

 ready(function () { // your code here });

Está escrito para manejar la carga asíncrona de JS, pero es posible que desee sincronizar la carga de este script primero a menos que esté minimizando. Lo he encontrado útil en el desarrollo.

Los navegadores modernos también admiten la carga asíncrona de scripts, lo que mejora aún más la experiencia. El soporte para asíncrono significa que se pueden descargar múltiples scripts simultáneamente mientras se sigue representando la página. Solo tenga cuidado cuando dependa de otros scripts cargados de forma asíncrona o use un minificador o algo como browserify para manejar las dependencias.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!