[英]Why is document.body null in my javascript?
這是我的簡短HTML文檔。
為什么Chrome控制台會注意到此錯誤:
“未捕獲的TypeError:無法調用
null
方法'appendChild'”?
<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之前創建所有元素。 在這種情況下,你在head
使用body
有一些javascript。 不酷。
要在一個包裹此代碼window.onload
處理程序或將其放置在后 <body>
標簽(通過提及電子bacho 2.0 )。
<head>
<title>Javascript Tests</title>
<script type="text/javascript">
window.onload = function() {
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
元素加載之前正在執行。
有幾種方法可以解決這個問題。
將您的邏輯包裝在DOMContentLoaded
的事件偵聽器中。
這樣做時,將在加載body
元素時執行回調。
document.addEventListener('DOMContentLoaded', function () { // ... // Place code here. // ... });
根據您的需要,您也可以將load
事件偵聽器附加到window
對象:
window.addEventListener('load', function () { // ... // Place code here. // ... });
有關DOMContentLoaded
和load
事件之間的區別, 請參閱此問題 。
<script>
元素的位置,最后加載JavaScript: 現在,您的<script>
元素正在文檔的<head>
元素中加載。 這意味着它將在body
加載之前執行。 Google開發人員建議將<script>
標記移動到頁面末尾,以便在處理JavaScript之前呈現所有HTML內容。
<!DOCTYPE html> <html> <head></head> <body> <p>Some paragraph</p> <!-- End of HTML content in the body tag --> <script> <!-- Place your script tags here. --> </script> </body> </html>
將代碼添加到onload事件中。 接受的答案正確地顯示了這一點,但是在撰寫本文時,答案以及所有其他答案也建議將腳本標記放在結束標記之后,。
這不是有效的HTML。 但是它會導致你的代碼工作,因為瀏覽器太客氣了;)
有關詳細信息,請參閱此答案。 將<script>標記放在</ body>標記后面是錯誤的嗎?
由於這個原因,其他答案也是如此。
或者添加此部分
<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>
在HTML之后,如:
<html>
<head>...</head>
<body>...</body>
<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>
</html>
瀏覽器從上到下解析您的html,您的腳本在加載正文之前運行。 修復身體后的腳本。
<html>
<head>
<title> Javascript Tests </title>
</head>
<body>
</body>
<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>
</html>
代碼運行時, document.body
尚不可用。
你可以做什么:
var docBody=document.getElementsByTagName("body")[0];
docBody.appendChild(mySpan);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.