2015-12-08 3 views
-1

getElementById возвращает null при присвоении переменной.getElementById возвращает null при присвоении переменной

var element = document.getElementById("ul1"); 
var newelement = document.createElement("li"); 
newelement.innerHTML = "New"; 
element.appendChild(newelement); 
+0

вы разместили свой сценарий тег после 'ul1' – Ramanlfc

+1

Вы либо не имеют элемент с таким идентификатором, или это еще не *** *** ***! – adeneo

+0

Просьба описать. –

ответ

0

Когда вы кладете JavaScript в head документе будет загружать (и блокировать загрузку body) перед любым другим элементом на странице.

Быстрый пример того, что вы на самом деле делание бы это:

<!-- script runs before element creation --> 
<script type="text/javascript"> 
    var element = document.getElementById('ul1'); 
</script> 
<!-- this is after execution, where JS could not find the element but only now is the element actually created --> 
<ul id="ul1"></ul> 

Чтобы решить эту проблему, вы можете сделать несколько вещей

  • Поместите <script> тег ниже элемент, на который вы хотите нацелиться
  • место <script> бирка чуть выше закрытия </body> тег)
  • используйте window.onload = function() { ... }, чтобы убедиться, что страница загружена, прежде чем что-либо делать.

Тогда ul элемент будет существовать, и вы будете иметь возможность добавить свой LI :)

+0

В ответ на ответ Мэтьюса вы сказали: «Это о том, что DOM не загружается». Как вы можете это знать? Фрагмент кода OP не предоставляет эту информацию. – Teemu

+0

Мой личный фаворит заключается в том, чтобы поместить мои сценарии в (несколько) функции (-ов) в связанном файле, а затем просто вызвать их прямо над ''. Это чище и использует кеширование. – abluejelly

+0

@Teemu потому что единственные причины 'document.getElementById' не могут найти ваш элемент, если: 1)' Идентификатор буквально не существует (typo'd somwhere или удален) 'или 2)' DOM не загружен'. Первая - очень простая проблема отладки, последняя просто не знает, что это вещь. – abluejelly

Смежные вопросы