Tengo un script que usa $(document).ready
, pero no usa nada más de jQuery. Me gustaría aclararlo eliminando la dependencia de jQuery.
¿Cómo puedo implementar mi propia $(document).ready
funcionalidad sin usar jQuery? Sé que usar window.onload
no será lo mismo, ya que se window.onload
dispara después de que se hayan cargado todas las imágenes, cuadros, etc.
javascript
jquery
FlySwat
fuente
fuente
$(document).ready
, puede resolver ese problema fácilmente ejecutando su código en la parte inferior de la página en lugar de en la parte superior. HTML5Boilerplate utiliza este enfoque exacto.Respuestas:
Hay un reemplazo basado en estándares,
DOMContentLoaded
que es compatible con más del 98% de los navegadores , aunque no IE8:La función nativa de jQuery es mucho más complicada que solo window.onload, como se muestra a continuación.
fuente
Editar:
Aquí hay un reemplazo viable para jQuery ready
Tomado de https://plainjs.com/javascript/events/running-code-when-the-document-is-ready-15/
Otra buena función domReady aquí tomada de https://stackoverflow.com/a/9899701/175071
Como la respuesta aceptada estaba muy lejos de ser completa, uní una función "lista"
jQuery.ready()
basada en la fuente jQuery 1.6.2:Cómo utilizar:
No estoy seguro de cuán funcional es este código, pero funcionó bien con mis pruebas superficiales. Esto llevó bastante tiempo, así que espero que usted y otros puedan beneficiarse de ello.
PD .: sugiero compilarlo .
O puede usar http://dustindiaz.com/smallest-domready-ever :
o la función nativa si solo necesita admitir los nuevos navegadores (a diferencia de jQuery ready, esto no se ejecutará si agrega esto después de que la página se haya cargado)
fuente
Tres opciones:
script
es la última etiqueta del cuerpo, el DOM estaría listo antes de que se ejecute la etiqueta del scriptonreadystatechange
Fuente: MDN
DOMContentLoaded
Preocupado por los navegadores de la edad de piedra: vaya al código fuente de jQuery y use la
ready
función. En ese caso, no está analizando + ejecutando toda la biblioteca, solo está haciendo una pequeña parte de ella.fuente
Coloque su
<script>/*JavaScript code*/</script>
derecha antes del cierre</body>
etiqueta de .Es cierto que esto puede no ser adecuado para los propósitos de todos, ya que requiere cambiar el archivo HTML en lugar de simplemente hacer algo en el archivo JavaScript a la vez
document.ready
, pero aún así ...fuente
</html>
etiqueta de cierre ?html
etiqueta solo debe contenerhead
ybody
.La solución del pobre hombre:
Ver violín
Añadido este, un poco mejor, supongo, propio alcance y no recursivo
Ver violín
fuente
setInterval
y elimine la recursión por completo.Yo uso esto:
Nota: Esto probablemente solo funcione con navegadores más nuevos, especialmente estos: http://caniuse.com/#feat=domcontentloaded
fuente
Realmente, si solo le interesa Internet Explorer 9+ , este código sería suficiente para reemplazar
jQuery.ready
:Si te preocupa Internet Explorer 6 y algunos navegadores realmente extraños y raros, esto funcionará:
fuente
Esta pregunta se hizo hace bastante tiempo. Para cualquiera que solo vea esta pregunta, ahora hay un sitio llamado "es posible que no necesite jquery" que desglosa, por nivel de soporte de IE requerido, toda la funcionalidad de jquery y proporciona algunas bibliotecas alternativas más pequeñas.
La secuencia de comandos preparada para documentos IE8 de acuerdo con usted podría no necesitar jquery
fuente
'onreadystatechange'
es necesario en lugar dedocument.attachEvent('onload', fn);
Recientemente estaba usando esto para un sitio móvil. Esta es la versión simplificada de John Resig de "Pro JavaScript Techniques". Depende de addEvent.
fuente
Cross-browser (navegadores antiguos también) y una solución simple:
Mostrando alerta en jsfiddle
fuente
La respuesta de jQuery fue muy útil para mí. Con un pequeño refactorio se ajustó bien a mis necesidades. Espero que ayude a alguien más.
fuente
removeListener
se deberá llamar con el documento como contexto, es decir.removeListener.call(document, ...
Aquí está el fragmento de código más pequeño para probar DOM listo que funciona en todos los navegadores (incluso IE 8):
Mira esta respuesta .
fuente
Simplemente agregue esto al final de su página HTML ...
Porque, los documentos HTML se analizan de arriba a abajo.
fuente
Vale la pena mirar en Rock Solid addEvent () y http://www.braksator.com/how-to-make-your-own-jquery .
Aquí está el código en caso de que el sitio se caiga
fuente
Este código de navegador cruzado llamará a una función una vez que el DOM esté listo:
Así es como funciona:
domReady
llama altoString
método de la función para obtener una representación en cadena de la función que pasa y la envuelve en una expresión que llama inmediatamente a la función.domReady
crea un elemento de script con la expresión y lo agrega albody
documento.body
después de que el DOM esté listo.Por ejemplo, si hace esto:
domReady(function(){alert();});
lo siguiente se agregará albody
elemento:Tenga en cuenta que esto solo funciona para funciones definidas por el usuario. Lo siguiente no funcionará:
domReady(alert);
fuente
Es el año 2020 y la
<script>
etiqueta tienedefer
atributo.por ejemplo:
especifica que el script se ejecuta cuando la página ha finalizado el análisis.
https://www.w3schools.com/tags/att_script_defer.asp
fuente
¿Qué tal esta solución?
fuente
Siempre es bueno usar equivalentes de JavaScript en comparación con jQuery. Una razón es una biblioteca menos de la que depender y son mucho más rápidos que los equivalentes de jQuery.
Una referencia fantástica para los equivalentes de jQuery es http://youmightnotneedjquery.com/ .
En lo que respecta a su pregunta, tomé el siguiente código del enlace de arriba :) La única advertencia es que solo funciona con Internet Explorer 9 y posterior.
fuente
El más mínimo y 100% de trabajo
Elegí la respuesta de PlainJS y está funcionando bien para mí. Se extiende
DOMContentLoaded
para que pueda ser aceptado en todos los navegadores.Esta función es el equivalente del
$(document).ready()
método de jQuery :Sin embargo, a diferencia de jQuery, este código solo se ejecutará correctamente en los navegadores modernos (IE> 8) y no lo hará en caso de que el documento ya esté representado en el momento en que se inserta este script (por ejemplo, a través de Ajax). Por lo tanto, necesitamos extender esto un poco:
Esto cubre básicamente todas las posibilidades y es un reemplazo viable para el asistente jQuery.
fuente
Encontramos una implementación de navegador cruzado rápida y sucia que puede hacer el truco para la mayoría de los casos simples con una implementación mínima:
fuente
doc.body
?Las soluciones setTimeout / setInterval presentadas aquí solo funcionarán en circunstancias específicas.
El problema aparece especialmente en versiones anteriores de Internet Explorer hasta 8.
Las variables que afectan el éxito de estas soluciones setTimeout / setInterval son:
El código original (Javascript nativo) para resolver este problema específico está aquí:
Este es el código a partir del cual el equipo de jQuery ha desarrollado su implementación.
fuente
Esto es lo que uso, es rápido y cubre todas las bases, creo; funciona para todo excepto IE <9.
Esto parece captar todos los casos:
El evento DOMContentLoaded está disponible en IE9 y todo lo demás, por lo que personalmente creo que está bien usar esto. Vuelva a escribir la declaración de la función de flecha en una función anónima normal si no está transpilando su código de ES2015 a ES5.
Si desea esperar hasta que se carguen todos los activos, se muestren todas las imágenes, etc., use window.onload en su lugar.
fuente
Si no tiene que admitir navegadores muy antiguos, esta es una forma de hacerlo incluso cuando su script externo está cargado con un atributo asíncrono :
fuente
Para IE9 +:
fuente
Si está cargando jQuery cerca de la parte inferior de BODY, pero tiene problemas con el código que escribe jQuery (<func>) o jQuery (document) .ready (<func>), consulte jqShim en Github.
En lugar de recrear su propia función de documento listo, simplemente mantiene las funciones hasta que jQuery esté disponible y luego continúa con jQuery como se esperaba. El punto de mover jQuery a la parte inferior del cuerpo es acelerar la carga de la página, y aún puede lograrlo al incluir jqShim.min.js en el encabezado de su plantilla.
Terminé escribiendo este código para mover todos los scripts en WordPress al pie de página, y solo este código de ajuste ahora se encuentra directamente en el encabezado.
fuente
Prueba esto:
fuente
onDocReady proporciona una devolución de llamada cuando el dom HTML está listo para acceder / analizar / manipular por completo.
onWinLoad proporciona una devolución de llamada cuando todo se ha cargado (imágenes, etc.)
fuente
fuente
La mayoría de las funciones de Vanilla JS Ready NO consideran el escenario en el que
DOMContentLoaded
se configura el controlador después de el documento ya está cargado, lo que significa que la función nunca se ejecutará . Esto puede suceder si buscaDOMContentLoaded
dentro de unasync
script externo (<script async src="file.js"></script>
).El siguiente código
DOMContentLoaded
solo verifica si el documentoreadyState
no está yainteractive
ocomplete
.Si también quieres admitir IE:
fuente
Simplemente uso:
Y a diferencia
document.addEventListener("DOMContentLoaded" //etc
de la respuesta principal, funciona desde IE9: http://caniuse.com/#search=DOMContentLoaded solo indica tan recientemente como IE11.Curiosamente me topé con esta
setTimeout
solución en 2009: ¿Verifica la preparación de la exageración DOM?, que probablemente podría haberse redactado un poco mejor, ya que quise decir "es excesivo usar los enfoques más complicados de varios marcos para verificar la disponibilidad del DOM".Mi mejor explicación de por qué funciona esta técnica es que, cuando se alcanza el script con un setTimeout, el DOM está en el medio de ser analizado, por lo que la ejecución del código dentro del setTimeout se aplaza hasta que finalice la operación.
fuente