2012-08-30 111 views
1
<title>New Web Project</title> 
     <script type="text/javascript"> 
      var paras = document.getElementsByTagName("p"); 
      for (var i=0; i< paras.length; i++) { 
      var title_text = paras[i].getAttribute("title"); 
      if (title_text != null) { 
       alert(title_text); 
       } 
      } 

     </script> 
    </head> 
    <body> 
     <h1>New Web Project Page</h1> 
     <p title="test"> This is just a test</p> 
    </body> 

爲什麼警報沒有價值?我覺得它應該彈出文本test爲什麼警報沒有價值?

+0

您在DOM完成之前調用JS。 –

+0

如果你對jQuery沒問題,那麼把它包裝在document.ready中就可以了。 –

+0

爲什麼你不使用jQuery? – Ascension

回答

6

因爲當script進行評價時,p被加載

如果添加scriptp,當p已經呈現,它會顯示alert預期:

<p title="test"> This is just a test</p> 
<script type="text/javascript"> 
    var paras = document.getElementsByTagName("p"); 
    for (var i=0; i< paras.length; i++) { 
    var title_text = paras[i].getAttribute("title"); 
    if (title_text != null) { 
     alert(title_text); 
    } 
} 
</script> 

DEMO

2

因爲您在呈現html元素之前初始化腳本。

將腳本移到底部或等待DOM。像這樣:

<html> 
<head> 
<title>New Web Project</title> 
    <script type="text/javascript"> 
     window.onload = function(){ 
      var paras = document.getElementsByTagName("p"); 
      for (var i=0; i< paras.length; i++) { 
      var title_text = paras[i].getAttribute("title"); 
      if (title_text != null) { 
       alert(title_text); 
       } 
      } 
     } 
    </script> 
</head> 
<body> 
    <h1>New Web Project Page</h1> 
    <p title="test"> This is just a test</p> 
</body> 
</html> 
+0

儘管在文檔完成之前您正在調用* getElementsByTagName *,但代碼的前幾行沒有任何用處。 * window.onload *的第二個賦值將替換第一個,因此如果已經分配了前一個函數,則不會調用它。 – RobG

+0

第一行是針對某些不知道window.onload的IE版本,因此如果它不存在,我將爲其創建一個函數 –

+1

上述第三行表示無論以前分配給「窗口.onload'永遠不會被調用。哪些版本的IE不支持window.onload?當然IE 6+確實如此,如果版本5或版本4沒有,我會感到非常驚訝。 – RobG

相關問題