Javascript не может найти элемент по id? [дубликат]

этот вопрос уже есть ответ здесь:

<html>
<head>
    <title>Test javascript</title>

    <script type="text/javascript">
        var e = document.getElementById("db_info");
        e.innerHTML='Found you';
    </script>
</head>
<body>
    <div id="content">
        <div id="tables">

        </div>        
        <div id="db_info">
        </div>
    </div>
</body>
</html>

Если я использую alert(e); он появляется null.... и очевидно, я не получаю никаких "нашел тебя" на экране. Что я делаю не так?

5 ответов


проблема в том, что вы пытаетесь получить доступ к элементу до его существования. Вам нужно дождаться полной загрузки страницы. Возможный подход-использовать onload обработчик:

window.onload = function () {
    var e = document.getElementById("db_info");
    e.innerHTML='Found you';
};

большинство распространенных библиотек JavaScript предоставляют событие DOM-ready. Это лучше, так как window.onload ждет всех изображений. В большинстве случаев вам это не нужно.

другой подход-разместить тег скрипта прямо перед закрытием </body> - tag, так как все в передняя часть загружается в момент исполнения, затем.


запустите код либо в событии onload, либо непосредственно перед закрытием body тег. Вы пытаетесь найти элемент, которого нет в данный момент.


как браузер узнает, когда выполняется код внутри тега script? Итак, чтобы запустить код после полной загрузки окна,

window.onload = doStuff;

function doStuff() {
    var e = document.getElementById("db_info");
    e.innerHTML='Found you';
}

другой альтернативой является сохранение вашего <script...</script> непосредственно перед закрытием </body> тег.


скрипт вызывается до того, как элемент существует.

вы должны попробовать одно из следующих действий:

  1. оберните код в функцию и используйте событие body onload для его вызова.
  2. поставить скрипт в конце документа
  3. используйте атрибут defer в объявлении тега скрипта

скрипт выполняется перед построением DOM тела. Поместите все это в функцию и вызовите ее из onload элемента тела.