2017-07-24 40 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

謝謝你,夥計, 我的