Ini dokumen HTML singkat saya.
Mengapa Chrome Console memperhatikan kesalahan ini:
"UnEught TypeError: Tidak dapat memanggil metode 'appendChild' of
null
"?
<html>
<head>
<title>Javascript Tests</title>
<script type="text/javascript">
var mySpan = document.createElement("span");
mySpan.innerHTML = "This is my span!";
mySpan.style.color = "red";
document.body.appendChild(mySpan);
alert("Why does the span change after this alert? Not before?");
</script>
</head>
<body>
</body>
</html>
javascript
google-chrome
John Hoffman
sumber
sumber
Jawaban:
Tubuh belum didefinisikan pada saat ini. Secara umum, Anda ingin membuat semua elemen sebelum Anda menjalankan javascript yang menggunakan elemen-elemen ini. Dalam hal ini Anda memiliki beberapa javascript di
head
bagian yang menggunakanbody
. Tidak keren.Anda ingin membungkus kode ini dalam
window.onload
penangan atau menempatkannya setelah itu<body>
tag (seperti yang disebutkan oleh e-Bacho 2.0 ).Lihat demo .
sumber
head
bagian yang sedang dieksekusi. Tetapibody
bagian dari html, mungkin, bahkan belum diunduh. Atau sudah diunduh, tetapi masih belum dievaluasi saat ini. Jadi tidak ada di DOM.<body>
tag"Script Anda sedang dieksekusi sebelum
body
elemen bahkan dimuat.Ada beberapa cara untuk mengatasinya.
Bungkus kode Anda dalam panggilan balik DOM Load:
Bungkus logika Anda dalam acara pendengar
DOMContentLoaded
.Dengan demikian, callback akan dieksekusi ketika
body
elemen telah dimuat.Bergantung pada kebutuhan Anda, Anda dapat juga melampirkan
load
pendengar acara kewindow
objek:Untuk perbedaan antara peristiwa
DOMContentLoaded
danload
peristiwa, lihat pertanyaan ini .Pindahkan posisi
<script>
elemen Anda , dan muat JavaScript terakhir:Saat ini,
<script>
elemen Anda sedang dimuat dalam<head>
elemen dokumen Anda. Ini berarti bahwa itu akan dieksekusi sebelumbody
dimuat. Pengembang Google merekomendasikan untuk memindahkan<script>
tag ke akhir halaman Anda sehingga semua konten HTML diberikan sebelum JavaScript diproses.sumber
Tambahkan kode Anda ke acara onload. Jawaban yang diterima menunjukkan ini dengan benar, namun jawaban itu serta semua yang lain pada saat penulisan juga menyarankan menempatkan tag skrip setelah tag body penutup,.
Ini bukan html yang valid. Namun itu akan menyebabkan kode Anda berfungsi, karena browser terlalu baik;)
Lihat jawaban ini untuk info lebih lanjut. Apakah salah menempatkan tag <script> setelah tag </body>?
Turunkan jawaban lain karena alasan ini.
sumber
Atau tambahkan bagian ini
setelah HTML, seperti:
sumber
Browser mem-parsing html Anda dari atas ke bawah, skrip Anda berjalan sebelum tubuh dimuat. Untuk memperbaiki skrip put body.
sumber
document.body
belum tersedia saat kode Anda berjalan.Apa yang dapat Anda lakukan sebagai gantinya:
sumber