2017-07-24 3 views
0

, wenn ich diese in meinem app.js:Objektverweis in Code nicht definiert, aber nicht in der Konsole

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

console.log(titres) 

Es mir diese zurückschicken: []

, wenn ich dies auf dem Browser in der Konsole setzen:

:

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

titres mir diese zurückschicken

Jemand weiß warum bitte?

+2

Veröffentlichen Sie bitte eine [mcve]. Wir brauchen Ihre HTML – j08691

+0

Weil es 5 Ankerelemente auf der Seite gibt – Erwin

+0

Setzen Sie diese '.js' Datei am Ende Ihrer HTML-Datei, direkt vor ''. –

Antwort

7

Wenn Sie diese Anweisungen in die Konsole eingeben, wurde die Seite bereits vollständig analysiert, sodass die Elemente gefunden werden und ein Array-ähnliches Objekt zurückgegeben wird, das Verweise auf diese Elemente enthält.

Aber höchstwahrscheinlich, wenn Sie es mit dem Code in app.js versuchen, Ihre app.js Datei ausgeführt wird, bevor die gesamte HTML-Seite in den Speicher analysiert worden ist, wie folgt aus:

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

    . . . 

Versuchen entweder die Indienststellung <script src="app.js"></script> Code kurz vor dem Schließen des body Elements (so dass es läuft, nachdem die HTML bereits analysiert) wie folgt aus:

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

oder lassen sie das script-Tag an der Spitze die Seite, aber innerhalb der app.js Datei, wickeln Sie Ihren Code in einem Event-Handler wie folgt aus:

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

, die die Ausführung des Codes, bis die HTML geladen aufschieben wird.

+0

Vielen Dank dude, Meine

Verwandte Themen