Действительно ли нужно ждать, пока DOM будет готов манипулировать DOM? - PullRequest
4 голосов
/ 21 апреля 2011

Действительно ли необходимо ждать событий "ready" (или "window.onload"), если ваш код манипулирует только теми элементами DOM, которые уже полностью проанализированы?

Документация jQuery для функции "ready ()" демонстрирует, как можно ждать выполнения действий, пока DOM не будет полностью готов, но пример для кода (тегов сценария), которые перечислены перед DOM элементы в вопросе. Но кажется, что код, который появляется после необходимых элементов DOM в документе HTML, имеет к ним доступ, так как, предположительно, DOM создается при анализе документа браузером.

Например, можно ли предположить, что следующий код надежен во всех ситуациях, или все еще необходимо (или выгодно) использовать обработчик ready / onload?

<body>
  <div id="foo"/>
  <script type="text/javascript">
    var foo = document.getElementById('foo');
    foo.innerHTML = 'The element #foo is loaded!';
  </script>
</body>

Этот ТАК вопрос очень похож, но я хотел бы поднять его, чтобы увидеть, есть ли еще какая-то информация.

Ответы [ 4 ]

6 голосов
/ 21 апреля 2011

Если ваш код JavaScript находится ниже элементов DOM и изменяет только их исключительно, вам не нужно ждать события готовности DOM.

Однако имейте в виду, что редактирование элемента DOM, который содержит элемент script (или, более конкретно, перед закрывающим тегом элемента), используемый для , вызывает большие проблемы в IE6 (спасибо TJ Crowder ) и IE7.

Однако для этого требуется встроенный scripts, что может быть проблемой обслуживания.Желательно, чтобы ваш JavaScript хранился извне (и многие говорят о преимуществах их включения перед закрывающим тегом body) для многих преимуществ, таких как простота обслуживания и детальное управление кэшем.

1 голос
/ 21 апреля 2011

в вашем случае это нормально, потому что браузер будет отображать ваш код построчно, а в вашем коде сначала идёт id = "foo", поэтому он получит этот div .... но предположим, что вы написали этот скрипт в head tagскрипт будет запускаться первым, и он не получит div с id = "foo", потому что он еще не загружен .. его лучше записать в метод document.ready

0 голосов
/ 21 апреля 2011

Документ загружается линейно, поэтому ваш код работает правильно. Иногда программисты не используют документ, готовый для целей производительности, когда JavaScript не зависит от DOM ниже. Вот пример пример .

0 голосов
/ 21 апреля 2011

Да, это безопасно, если ваш js-код следует за dom, но обычно не очень хорошая идея смешивать html и js.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...