javascript - 对象引用在代码中未定义,但在控制台中未定义

标签 javascript

当我将其放入我的 app.js 中时:

var titres = document.querySelectorAll('header ul li a')

console.log(titres)

它发回给我:[]

如果我把它放在浏览器的控制台中:

var titres = document.querySelectorAll('header ul li a')

titres 发回此信息:[a,a,a,a,a]

有人知道为什么吗?

最佳答案

当您在控制台中键入这些语句时,页面已被完全解析,因此会找到元素,并返回一个包含对这些元素的引用的“类似数组”的对象。

但是,最有可能的是,当您使用 app.js 中的代码尝试时,你的app.js文件在整个 HTML 页面被解析到内存之前被执行,如下所示:

<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <!-- At this point, the rest of the HTML hasn't been parsed yet, so
         if app.js tries to query for those elements, they won't be found! -->
    <script src="app.js"></script> 
  </head>
  <body>

  .  .  . 

尝试输入 <script src="app.js"></script> body 结束之前的代码元素(以便它在 HTML 解析后运行)如下所示:

    .  .  .
    <script src="app.js"></script> 
  </body>
</html>

或留下 script标签位于页面顶部,但位于 app.js 内文件中,将代码包装在事件处理程序中,如下所示:

window.addEventListener("DOMContentLoaded", function(){
    var titres = document.querySelectorAll('header ul li a')
    console.log(titres)
});

这会将代码的执行推迟到 HTML 加载之后。

关于javascript - 对象引用在代码中未定义,但在控制台中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45289384/

相关文章:

javascript - 通过 json 动态地将范围绑定(bind)到 ng-model

javascript - jQuery - 多个模式单独处理

javascript - Request-URI Too Large 请求的 URL 长度超出了该服务器的容量限制

javascript - 我所有的 Observables 错误 'takeUntil is not a function'

javascript警报未触发

javascript - 数据表更改默认排序顺序

javascript - 替换 View 后主干 View 事件未触发,然后放回页面上

javascript - 显示 Capybara Javascript 错误的文件名和行号

javascript - 如何在输出窗口中显示数组内容?

javascript - 哪里是存储非代码文件(例如 mp3)以便使用 codepen 进行 javascript 测试的好地方?