2017-07-24 39 views
0

当我把这个在我的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]

有人知道为什么请吗?

+2

请寄[mcve]。我们需要您的HTML – j08691

+0

因为页面上有5个锚点元素 – Erwin

+0

将'.js'文件放在HTML文件的底部,就在''之前。 –

回答

7

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

但是,最有可能的,当你在app.js代码试试吧,被前整个HTML页面已经被解析到内存中,这样执行你的app.js文件:

<!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被加载后,直到。

+0

谢谢你,伙计, 我的