getElementById возвращает null?

document.getElementById('id div, который точно существует') возвращает null.

Изначально я загрузил javascript последним, чтобы убедиться, что мне не нужно беспокоиться о событии onload. Я также попробовал использовать событие onload. Это очень жутко. Любые идеи или помощь будут очень признательны.

Комментарии к вопросу (4)

Также будьте осторожны с выполнением js на странице. Например, если вы сделаете что-то вроде этого:

(function(window, document, undefined){

  var foo = document.getElementById("foo");

  console.log(foo);

})(window, document, undefined); 

Это вернет null, потому что вы будете вызывать документ до того, как он будет загружен.

Лучший вариант...

(function(window, document, undefined){

// code that should be taken care of right away

window.onload = init;

  function init(){
    // the code to be called when the dom has loaded
    // #document has its nodes
  }

})(window, document, undefined);
Комментарии (0)
Решение

Это может быть вызвано:

  1. Неправильный синтаксис HTML (какой-то тег не закрыт или подобная ошибка)
  2. Дублирование идентификаторов - есть два элемента HTML DOM с одинаковыми идентификаторами
  3. Возможно, элемент, который вы пытаетесь получить по ID, создается динамически (загружается с помощью ajax или создается скриптом)?

Пожалуйста, опубликуйте ваш код.

Комментарии (5)

Может быть много причин, по которым document.getElementById не работает

  • У вас неверный идентификатор

    Токены ID и NAME должны начинаться с буквы ([A-Za-z]) и за ними может следовать любое количество букв, цифр ([0-9]), дефисов ("-"), знаков подчеркивания ("_"), двоеточий (":") и периодов ("."). (ресурс: https://stackoverflow.com/questions/70579/what-are-valid-values-for-the-id-attribute-in-html)

  • вы использовали какой-то идентификатор, который вы уже использовали как <meta>имя в вашем заголовке (например, copyright, author... ) это выглядит странно, но это случилось со мной: если вы 'используете IE, посмотрите на (ресурс: http://www.phpied.com/getelementbyid-description-in-ie/)

  • вы нацеливаетесь на элемент внутри фрейма или iframe. В этом случае, если iframe загружает страницу в том же домене, что и родитель, вы должны нацелиться на contentdocument перед поиском элемента (ресурс: https://stackoverflow.com/questions/8710100/calling-a-specific-id-inside-a-frame/8710249#8710249)

  • Вы'просто ищете элемент, когда узел не загружен в DOM, или, возможно, это'простая ошибка в написании

Я сомневаюсь, что вы использовали один и тот же ID дважды или более: в таком случае document.getElementById должен возвращать, по крайней мере, первый элемент

Комментарии (1)