Довольно часто при написании кода JavaScript вам нужно проверять, что DOM полностью загружен. Это делается для того, чтобы быть уверенным, что все элементы DOM доступны, и вы можете получить доступ к этим элементам и уже можете ими манипулировать.
Всякий раз, когда вы используете JavaScript для манипулирования вашей страницей, вам нужно дождаться события готовности документа. Событие готовности документа сигнализирует о загрузке DOM страницы, после которого вы уже можете манипулировать им. Обратите внимание, что событие готовности документа (ready) запускается ДО загрузки всех картинок и других медиа-данных, но после полной готовности DOM.
В сегодняшней статье мы рассмотрим основные способы проверки загрузки DOM с помощью библиотеки jQuery, а также с помощью простого JavaScript.
Библиотека jQuery располагает двумя методами для проверки загрузки DOM, выполнения кода и прикрепления обработчиков событий: $(document).ready и $(window).load.
Эти функции проверки загрузки DOM, которые используются в jQuery (также называются jQuery DOM Ready), имеют различные виды написания.
В основном, когда вы вызываете функцию jQuery, вы передаете ее объекту документа (document). Функция возвращает расширенную версию объекта документа. Этот расширенный объект имеет функцию ready(), в которую вы передаете функцию(и) JavaScript. После готовности DOM, эти функции JavaScript будут выполнены.
Ниже мы рассмотрим примеры использования самовыполняющихся функций, которые срабатывают после загрузки элементов страницы.
Вариант №1.
$(document).ready(function() {
//здесь выполняем jQuery код, когда загружен DOM
});
Вариант №2.
$(function() {
//здесь jQuery код
});
Эта функция похожа на вариант №1 и выполняет буквально одно и то же.
Вариант №3.
jQuery(document).ready(function($) {
// здесь выполняем jQuery код, когда загружен DOM
});
Использование этого варианта помогает предотвратить конфликты с другими JavaScript платформами. Конфликты могут возникать вследствие того, что многие JavaScript библиотеки/фреймворки используют одно и то же ключевое слово — $ (символ доллара). Использование одинаково именованных функций обескураживает браузер.
Способом предотвращения подобных конфликтов можно назвать использование псевдонима для пространства имен (в примере выше это jQuery). Также можно использовать функцию $.noConflict(). Ниже 2 примера такого использования.
jQuery.noConflict(); // возвращаем переменную $ другим JavaScript библиотекам
jQuery(document).ready( function(){
// здесь выполняем jQuery код, когда загружен DOM, и без конфликтов
});
// второй вариант – используя способ самореализации функции
jQuery.noConflict();
(function($) {
// код, в котором используется алиас $ для jQuery
})(jQuery);
Вариант №4.
(function($) {
// код, в котором используется алиас $ для jQuery
$(function() {
// другой код, в котором используется алиас $ для jQuery
});
})(jQuery);
// дальше идет другой код, в котором используется алиас $ для других библиотек
Этот способ также поможет вам предотвратить конфликты с другими библиотеками JavaScript.
Вариант №5.
Иногда вам нужно манипулировать картинками с помощью JavaScript, но, напомним, что $(document).ready() не позволяет это делать, поскольку функция ждет загрузки DOM, но не других ресурсов. В этом случае вам нужно использовать другую инициализацию jQuery. Ниже пример такого кода:
$(window).load(function(){
// инициализация после того, как загрузились изображения на странице
// теперь страница полностью загружена, включая все фреймы, объекты и картинки
});
Событие ready запускается, когда DOM полностью загружен, а событие load запускается после загрузки не только DOM, но и всех ресурсов.
Вы также можете использовать событие загрузки документа следующим образом:
$(window).on("load", function(){
// инициализация после того, как страница полностью загрузилась (включая все фреймы, объекты и картинки)
});
jQuery позволяет зарегистрировать несколько слушателей готовности (ready) документов. Просто вызовите $(document).ready() необходимое количество раз (в основном так и делается, если на странице загружается несколько файлов скриптов). Код этих скриптов выполняется в том порядке, в котором они были загружены.
Если вы не используете в своих скриптах библиотеки или фреймворки (например, jQuery), вы можете использовать простой JavaScript. Эта имплементация работает приблизительно в 98% браузеров (все современные браузеры и IE9+):
document.addEventListener("DOMContentLoaded", function(event){
// добавляем обработчик, когда DOM полностью загружен
// здесь код
});
Для более старых браузеров вы можете использовать следующий подход: если вы поместите скрипт в конец страницы (он будет последним тегом script перед закрывающим тегом <body>), DOM будет готов и его статус readyState изменится на complete. После этого статуса вы можете выполнять код. Ниже пример такой реализации:
document.onreadystatechange = function() {
if (document.readyState == "complete") {
// документ полностью готов, можем выполнять JavaScript код
}
}
Вот мы и рассмотрели все варианты, в которых мы дожидаемся полной загрузки DOM, чтобы безопасно выполнять свой JavaScript код.
Если вам нужно выполнять код после загрузки DOM и вы используете jQuery в своем проекте, вы можете использовать функции ready документа или load объекта окна.
Если вам нужен простой JavaScript, тогда используйте событие DOMContentLoaded.
Очень многие недооценивают то, что у них есть, и переоценивают то, чего у них нет…
Стоит только поверить, что вы можете – и вы уже на полпути к цели Теодор…
Успешный бизнес в 2025 году немыслим без стабильной ИТ-инфраструктуры. От корпоративного сайта до CRM-системы все…
WordPress годами был непревзойденным "монолитом": он отвечал и за удобную админ-панель, и за хранение данных,…
В мире веб-серверов часто говорят о противостоянии Nginx vs Apache. Но что, если бы я…