Sí, básicamente lo que hizo es correcto, excepto que olvida que JavaScript está sincronizado en muchos casos, por lo que ejecuta el código antes de que se cargue su DOM , hay pocas maneras de resolver esto:
1) Verifique si DOM está completamente cargado, luego haga lo que quiera, puede escuchar DOMContentLoaded, por ejemplo:
<script>
document.addEventListener("DOMContentLoaded", function(event) {
console.log("DOM fully loaded and parsed");
});
</script>
2) Una forma muy común es agregar la etiqueta del script en la parte inferior de su document
(después de la etiqueta del cuerpo):
<html>
<head>
</head>
<body>
</body>
<script src="/bundle.js"></script>
</html>
3) Uso window.onload
, que se activa cuando se carga toda la página (img, etc.)
window.addEventListener("load", function() {
console.log("Everything is loaded");
});
4) Uso document.onload
, que se dispara cuando el DOM está listo:
document.addEventListener("load", function() {
console.log("DOM is ready");
});
Incluso hay más opciones para verificar si DOM está listo, pero la respuesta corta es NO ejecutar ningún script antes de asegurarse de que su DOM esté listo en todos los casos ...
JavaScript funciona junto con elementos DOM y si no están disponibles, devolverá nulo , podría romper toda la aplicación ... así que siempre asegúrese de estar completamente listo para ejecutar su JavaScript antes de hacerlo ...