Hier ist mein kurzes HTML-Dokument.
Warum bemerkt Chrome Console diesen Fehler:
"Ungefangener TypeError: Methode 'appendChild' von kann nicht aufgerufen werden
null
"?
<html>
<head>
<title>Javascript Tests</title>
<script type="text/javascript">
var mySpan = document.createElement("span");
mySpan.innerHTML = "This is my span!";
mySpan.style.color = "red";
document.body.appendChild(mySpan);
alert("Why does the span change after this alert? Not before?");
</script>
</head>
<body>
</body>
</html>
javascript
google-chrome
John Hoffman
quelle
quelle
Antworten:
Der Körper wurde zu diesem Zeitpunkt noch nicht definiert. Im Allgemeinen möchten Sie alle Elemente erstellen, bevor Sie Javascript ausführen, das diese Elemente verwendet. In diesem Fall haben Sie etwas Javascript in dem
head
Abschnitt, der verwendetbody
. Nicht cool.Sie möchten diesen Code in einen
window.onload
Handler einbinden oder nach dem<body>
Tag platzieren (wie in e-bacho 2.0 erwähnt ).Siehe Demo .
quelle
head
Abschnitt, der ausgeführt wird. Aberbody
vielleicht wurde ein Teil des HTML-Codes noch nicht einmal heruntergeladen. Oder es wird heruntergeladen, aber zu diesem Zeitpunkt noch nicht ausgewertet. Es existiert also nicht im DOM.<body>
Tag"Ihr Skript wird ausgeführt, bevor das
body
Element überhaupt geladen wurde.Es gibt verschiedene Möglichkeiten, dies zu umgehen.
Wickeln Sie Ihren Code in einen DOM Load-Rückruf ein:
Wickeln Sie Ihre Logik in einen Ereignis-Listener für
DOMContentLoaded
.Dabei wird der Rückruf ausgeführt, wenn das
body
Element geladen wurde.Abhängig von Ihren Anforderungen können Sie
load
demwindow
Objekt alternativ einen Ereignis-Listener hinzufügen:Informationen zum Unterschied zwischen
DOMContentLoaded
und undload
finden Sie in dieser Frage .Verschieben Sie die Position Ihres
<script>
Elements und laden Sie zuletzt JavaScript:Im
<script>
Moment wird Ihr Element in das<head>
Element Ihres Dokuments geladen . Dies bedeutet, dass es ausgeführt wird, bevor dasbody
geladen wurde. Google-Entwickler empfehlen, die<script>
Tags an das Ende Ihrer Seite zu verschieben, damit der gesamte HTML-Inhalt gerendert wird, bevor das JavaScript verarbeitet wird.quelle
Fügen Sie Ihren Code zum Onload-Ereignis hinzu. Die akzeptierte Antwort zeigt dies korrekt an, aber diese Antwort sowie alle anderen zum Zeitpunkt des Schreibens schlagen ebenfalls vor, das Skript-Tag nach dem schließenden Body-Tag zu setzen.
Dies ist kein gültiger HTML-Code. Es wird jedoch dazu führen, dass Ihr Code funktioniert, da die Browser zu freundlich sind;)
Weitere Informationen finden Sie in dieser Antwort. Ist es falsch, das <script> -Tag nach dem </ body> -Tag zu platzieren?
Andere Antworten aus diesem Grund abgelehnt.
quelle
Oder fügen Sie diesen Teil hinzu
nach dem HTML wie:
quelle
Der Browser analysiert Ihren HTML-Code von oben nach unten. Ihr Skript wird ausgeführt, bevor der Text geladen wird. Um das Skript nach dem Text zu korrigieren.
quelle
document.body
ist noch nicht verfügbar, wenn Ihr Code ausgeführt wird.Was Sie stattdessen tun können:
quelle