Đúng, về cơ bản những gì bạn đã làm là đúng, ngoại trừ bạn quên rằng JavaScript được đồng bộ hóa trong nhiều trường hợp, vì vậy bạn chạy mã trước DOM của mình được tải, có một số cách để giải quyết điều này:
1) Kiểm tra xem DOM đã được tải đầy đủ chưa, sau đó làm bất cứ điều gì bạn muốn, bạn có thể nghe DOMContentLoaded chẳng hạn:
<script>
document.addEventListener("DOMContentLoaded", function(event) {
console.log("DOM fully loaded and parsed");
});
</script>
2) Cách rất phổ biến là thêm thẻ script vào cuối documentthẻ (sau thẻ body):
<html>
<head>
</head>
<body>
</body>
<script src="/bundle.js"></script>
</html>
3) Sử dụng window.onload, được kích hoạt khi toàn bộ trang được tải (img, v.v.)
window.addEventListener("load", function() {
console.log("Everything is loaded");
});
4) Sử dụng document.onload, được bắn khi DOM sẵn sàng:
document.addEventListener("load", function() {
console.log("DOM is ready");
});
Thậm chí còn có nhiều tùy chọn hơn để kiểm tra xem DOM đã sẵn sàng chưa, nhưng câu trả lời ngắn gọn là KHÔNG chạy bất kỳ tập lệnh nào trước khi bạn đảm bảo DOM của bạn đã sẵn sàng trong mọi trường hợp ...
JavaScript đang hoạt động cùng với các phần tử DOM và nếu chúng không có sẵn, sẽ trả về null , có thể phá vỡ toàn bộ ứng dụng ... vì vậy hãy luôn đảm bảo rằng bạn đã sẵn sàng để chạy JavaScript trước khi bạn ...