Вот мой краткий HTML-документ.
Почему консоль Chrome отмечает эту ошибку:
«Uncaught TypeError: невозможно вызвать метод appendChild из
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
Джон Хоффман
источник
источник
Ответы:
Тело еще не определено. В общем, вы хотите создать все элементы, прежде чем выполнять javascript, который использует эти элементы. В этом случае у вас есть некоторый javascript в
head
разделе, который используетbody
. Не круто.Вы хотите , чтобы обернуть этот код в
window.onload
обработчик или поместить его после того, как в<body>
теге (как уже упоминалось электронной Bacho 2.0 ).См. Демо .
источник
head
исполняемом разделе. Ноbody
часть html, может быть, еще даже не скачана. Или он загружен, но на данный момент еще не оценивается. Так что его нет в DOM.<body>
теге»Ваш скрипт выполняется еще до
body
загрузки элемента.Есть несколько способов обойти это.
Оберните свой код в обратный вызов DOM Load:
Оберните свою логику в прослушиватель событий для
DOMContentLoaded
.При этом обратный вызов будет выполнен после
body
загрузки элемента.В зависимости от ваших потребностей вы можете также прикрепить
load
кwindow
объекту прослушиватель событий :Для разницы между
DOMContentLoaded
иload
событиями, увидеть этот вопрос .Переместите позицию вашего
<script>
элемента и загрузите JavaScript последней:Прямо сейчас ваш
<script>
элемент загружается в<head>
элемент вашего документа. Это означает, что он будет выполнен до того,body
как загрузится. Разработчики Google рекомендуют переместить<script>
теги в конец страницы, чтобы все содержимое HTML отображалось до обработки JavaScript.источник
Добавьте свой код в событие onload. Принятый ответ показывает это правильно, однако этот ответ, как и все остальные на момент написания, также предлагает поместить тег скрипта после закрывающего тега тела.
Это недействительный HTML. Однако это заставит ваш код работать, потому что браузеры слишком добрые;)
См. Этот ответ для получения дополнительной информации. Неправильно размещать тег <script> после тега </body>?
По этой причине проголосовали против других ответов.
источник
Или добавьте эту часть
после HTML, например:
источник
Браузер анализирует ваш html сверху вниз, ваш скрипт запускается до загрузки тела. Чтобы исправить, ставьте скрипт после тела.
источник
document.body
еще не доступен при запуске вашего кода.Что вы можете сделать вместо этого:
источник