Javascript:将变量设置为nodeValue不起作用

时间:2012-09-27 10:13:15

标签: javascript variables

我在设置变量时遇到问题,但找不到任何有用的文档。

这有效:

<!DOCTYPE html>
<html>
 <body onload="alert(document.getElementById('foo').firstChild.nodeValue)">
  <a id="foo" href="old">Foobar</a>
 </body>
</html>

但这不起作用:

<!DOCTYPE html>
<html>
 <head>
  <script type="text/javascript">
   var theText = document.getElementById('foo').firstChild.nodeValue ;
  </script>
 </head>
 <body onload="alert(theText)">
  <a id="foo" href="old">Foobar</a>
 </body>
</html>

警报显示“未定义”。我真正想要做的是这样的事情,这也是行不通的:

<!DOCTYPE html>
<html>
 <head>
  <script type="text/javascript">
    var theElement = document.getElementById('foo') ;
    var theText = theElement.firstChild.nodeValue ;
    document.write(theElement.getAttribute('href')) ;
    theElement.setAttribute('href', theText) ;
    document.write(meta.getAttribute('href')) ;
  </script>
 </head>
 <body>
  <a id="foo" href="old">Foobar</a>
 </body>
</html>

为什么这不起作用?

1 个答案:

答案 0 :(得分:1)

当您的脚本运行时,foo元素不存在。如果你检查JavaScript控制台,你会看到一个错误,如下所示:

  

未捕获的TypeError:无法读取null的“firstChild”属性

您收到此错误,因为如果找不到您要查找的元素,getElementById将返回null

您需要在标记后执行JavaScript代码。将您的script标记移到body的底部,或将其放在DOM ready / load事件处理程序中。例如:

<body onload="alert(theText)">
    <a id="foo" href="old">Foobar</a>
    <!-- Now the `foo` element actually exists, our script can find it -->
    <script type="text/javascript">
        var theText = document.getElementById('foo').firstChild.nodeValue;
    </script>
</body>