1

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

这有效:

<!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>

为什么这不起作用?

4

1 回答 1

1

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

未捕获的类型错误:无法读取 null 的属性“firstChild”

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

您需要在标记之后执行 JavaScript 代码。将您的script标签移动到底部body,或将其放入 DOM 就绪/加载事件处理程序中。例如:

<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>
于 2012-09-27T10:16:46.537 回答