2012-09-30 92 views
0

您是否知道爲什麼我的身體標記/元素在我嘗試使用時仍爲空?我有以下代碼:身體標記未定義或爲空

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/> 
<title>Max</title> 
<link rel="stylesheet" type="text/css" href="css/style.css"/> 
<script> 
alert(document.getElementsByTagName("*")); 
function se(){ 
    var twenty = document.getElementsByTagName("*")[20]; 
//twenty.children[1].children[0].children[1].innerHTML = "hiephoi"; 
} 
se(); 

var fg = document.getElementsByTagName("body")[0];//undefined 
</script> 
</head> 
<body> 
<script> 
alert(document.getElementsByTagName("*")); 
function se(){ 
    var twenty = document.getElementsByTagName("*")[20]; 
    //twenty.children[1].children[0].children[1].innerHTML = "hiephoi"; 
} 
se();</script> 
: 
: 
: 

如果我調試此,document.getElementsByTagName("*")確實給在斷點元素的列表,但是,讓代碼運行提供了一個錯誤,當我問

document.getElementsByTagName("*")[20].children[1].children[0].children[1].innerHTML = "hiephoi"; 

它說document.getElementsByTagName("*")[20].children不是對象,的確是未定義的。您可能想知道爲什麼我會使用通配符,但只是尋找任何特定的標記都不會返回任何內容。奇怪的是,通配符確實會返回一個節點列表。 我可以嘗試使用JQuery,但我試圖理解這一點。 我在想這可能與文檔的加載階段有關? 或者它可能是HTML包含一個丟失標籤的地方和JS變得困惑?

回答

1

您正試圖在創建DOM樹之前獲取元素。把你的javascript放在最後,在關閉body標籤之前,看看它是否有效(未測試過,但它可能不會出於同樣的原因)。

更好的是,在嘗試讀取DOM之前,請先查看window.onload以確定DOM已加載。 window.onload vs <body onload=""/>