2012-08-30 53 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