Уроки JavaScript – выполнение кода после полной загрузки DOM

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

Всякий раз, когда вы используете JavaScript для манипулирования вашей страницей, вам нужно дождаться события готовности документа. Событие готовности документа сигнализирует о загрузке DOM страницы, после которого вы уже можете манипулировать им. Обратите внимание, что событие готовности документа (ready) запускается ДО загрузки всех картинок и других медиа-данных, но после полной готовности DOM.

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

 

 

Способы проверки загрузки DOM в jQuery

Библиотека 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() необходимое количество раз (в основном так и делается, если на странице загружается несколько файлов скриптов). Код этих скриптов выполняется в том порядке, в котором они были загружены.

 

 

Использование простого JavaScript

Если вы не используете в своих скриптах библиотеки или фреймворки (например, 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.

 

Recent Posts

Сравнение цен с конкурентами: зачем это нужно интернет-магазину

Содержание статьи Введение: почему цены решают все Что значит сравнение цен с конкурентами 5 причин,…

5 дней ago

Лучшие сауны Киева: проверенные адреса и актуальные цены

В последние годы интерес к саунам в Киеве заметно вырос. Это связано не только с…

6 дней ago

BaniSauny: быстрый гид по баням и саунам Киева

В современном ритме мегаполиса отдых стал неотъемлемой частью заботы о здоровье и эмоциональном состоянии. Особенно…

6 дней ago

Рекламный аккаунт Facebook: Как получить максимум от рекламы с Tech4You

В современном мире цифрового маркетинга Facebook (Meta) остается одной из самых мощных платформ для продвижения…

1 неделя ago

Тактический тепловизор: назначение, особенности и преимущества

Этот прибор стал незаменимым элементом арсенала представителей множества профессий, но особенно актуален среди военных. Тепловизор…

2 недели ago

Как книги для саморазвития помогают «закрыть лишние мысли» и начать жить здесь и сейчас

Постоянный поток новостей, рабочих задач и личных забот часто приводит к тому, что в голове…

2 недели ago