Javascript, который обращается к DOM, не должен выполнять UNTIL, когда DOM был загружен.
Код, который выполняется в разделе <head>
документа, будет выполняться до того, как DOM будет загружен, и, таким образом, если он попытается работать с DOM, DOM просто будет пустым.
Код, который выполняется в разделе <body>
документа, будет выполняться ПОСЛЕ любых элементов DOM, которые находятся перед этим тегом сценария, но ПЕРЕД любыми элементами DOM, которые находятся после тега сценария.
Если вы положили теги <script>
в самом конце раздела <body>
прямо перед тегом </body>
, тогда вся DOM будет готова к выполнению этого скрипта.
DOMContentLoaded
(который jsFiddle вызывает onDomReady
) - это событие, которое запускается, когда DOM загружается и доступен для доступа к скрипту. Если вы запускаете свой код при возникновении события DOMContentLoaded, DOM будет готов для вашего кода для доступа к этой точке.
window.onload
- это событие, которое запускается при загрузке DOM, а также любые ресурсы, указанные в HTML-странице страницы, также загружаются (например, изображения). Это всегда срабатывает после события DOMContentLoaded.
Вы можете увидеть более подробное описание этого вопроса здесь: pure JavaScript equivalent to jQuery's $.ready() how to call a function when the page/dom is ready for it
Если код работает, когда в <body>
, но не в <head>
, то вы, вероятно, работает код слишком рано <head>
тег перед тем DOM готов. Вы можете либо просто оставить его ближе к концу <body>
, либо вы можете подключить его к одному из событий загрузки, а затем можете поместить его в тег <head>
, если хотите.
Уже ответил на stackoverflow [dom ready vs onload] (http://stackoverflow.com/questions/3698200/window-onload-vs-document-ready) –
'domready' и' onload' сопоставимы, но '
'и' 'ОЧЕНЬ разные. Пойдите, прочитайте любой учебник HTML. –