W3docs

Библиотеки для работы с DOM

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

Введение в библиотеки

Работа с DOM — это ключевой аспект веб-разработки, позволяющий создавать динамический контент и интерактивные пользовательские интерфейсы. Несмотря на то что ванильный JavaScript предоставляет мощные методы взаимодействия с DOM, библиотеки для работы с DOM оборачивают эти методы в более краткий и последовательный API. Они были незаменимы в эпоху несовместимых браузеров и по-прежнему полезны при быстром прототипировании и поддержке устаревших кодовых баз.

В этом руководстве объясняется, что делают такие библиотеки, когда они ещё оправданы в 2024+ году и как пользоваться наиболее популярной из них — jQuery — для выбора элементов, обработки событий и изменения DOM. Здесь же приведены современные ванильные аналоги, чтобы вы могли решить, когда библиотека действительно оправдывает своё применение.

Библиотека для работы с DOM — это слой JavaScript, предоставляющий вспомогательные функции для задач, которые иначе пришлось бы писать вручную: поиск элементов, чтение и запись их содержимого, добавление обработчиков событий, анимация и выполнение сетевых запросов. Вместо document.querySelectorAll в сочетании с циклом вы делаете один выразительный вызов, который применяется ко всем найденным элементам сразу.

Зачем использовать библиотеку для работы с DOM?

Использование библиотеки для работы с DOM даёт ряд преимуществ:

  1. Упрощённый синтаксис: библиотеки, как правило, предлагают более лаконичный и читаемый синтаксис по сравнению с ванильным JavaScript. Один вызов может воздействовать на целую коллекцию элементов без явного цикла.
  2. Кросс-браузерная совместимость: исторически библиотеки сглаживали различия между браузерами (например, attachEvent в Internet Explorer против стандартного addEventListener). Это была их главная функция.
  3. Расширенная функциональность: в библиотеки встроены вспомогательные средства — анимация, AJAX, обход DOM, эффекты — которые на чистом JavaScript потребовали бы множества строк кода.
  4. Повышение продуктивности: абстрагируя типовые задачи, библиотеки позволяют писать меньше кода и сосредоточиться на функциональности.

Когда библиотека может не понадобиться

Современные браузеры реализуют богатый стандартизированный DOM API, поэтому многие причины прибегать к библиотекам утратили актуальность:

  • document.querySelector / querySelectorAll нативно поддерживают поиск по CSS-селекторам.
  • element.classList, el.append(), el.closest() и el.matches() заменяют распространённые вспомогательные методы jQuery.
  • fetch() заменяет $.ajax, а Web Animations API охватывает многие эффекты.

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

Обзор библиотек

БиблиотекаНазначениеСтатус сегодня
jQueryОбщая работа с DOM, события, AJAX, анимацияЗрелая; по-прежнему распространена в legacy-приложениях и темах CMS (например, WordPress)
CashjQuery-подобный API, примерно на 80% легчеЛёгкая замена для современных браузеров
ZeptojQuery-совместимая, ориентирована на мобильные устройстваВ основном вытеснена нативными API
Umbrella JSНебольшие помощники для DOM/событийНишевая, только для современных браузеров

В примерах ниже используется jQuery, поскольку его API задал шаблон, которому подражают остальные библиотеки.

Основы jQuery

jQuery — это быстрая, небольшая и многофункциональная библиотека JavaScript. Она значительно упрощает обход и манипуляции с HTML-документами, обработку событий и анимацию благодаря удобному API, работающему во множестве браузеров.

Всё в jQuery начинается с глобальной функции $ (псевдоним для jQuery). Передав ей CSS-селектор, вы получаете объект jQuery — обёрнутую коллекцию найденных узлов DOM, по которой можно выстраивать цепочки вызовов методов. Оборачивание кода в $(document).ready(...) (или его краткую форму $(function(){ ... })) гарантирует, что DOM полностью разобран до начала работы с ним, — это аналог прослушивания нативного события DOMContentLoaded.

Выбор элементов

Выбор элементов в jQuery прост и повторяет синтаксис CSS-селекторов. Сравните эти эквивалентные запросы — вызов jQuery применяется ко всем совпадениям сразу, тогда как нативный API возвращает NodeList, по которому нужно итерировать:

// Vanilla JavaScript
document.querySelectorAll(".content").forEach(function (el) {
  el.textContent = "Hello";
});

// jQuery — no explicit loop needed
$(".content").text("Hello");

Подробнее о нативных селекторах читайте в разделе Выбор элементов DOM.

<!DOCTYPE html>
<html>
<head>
    <title>jQuery Element Selection</title>
    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
</head>
<body>
    <div class="content">Hello World</div>
    <button id="change-text">Change Text</button>

    <script>
        $(document).ready(function(){
            $("#change-text").click(function(){
                $(".content").text("Hello jQuery");
            });
        });
    </script>
</body>
</html>

Этот пример демонстрирует выбор элементов с помощью jQuery и изменение их текстового содержимого при нажатии кнопки.

Обработка событий

jQuery упрощает обработку событий благодаря интуитивным методам. Метод .on() — это современный предпочтительный способ привязки обработчиков; он также поддерживает делегирование событий, позволяя одному слушателю на родительском элементе обрабатывать события от текущих и будущих дочерних элементов. Подробнее об этом читайте в разделе Обработка событий в DOM.

<!DOCTYPE html>
<html>
<head>
    <title>jQuery Event Handling</title>
    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
</head>
<body>
    <button id="click-me">Click Me</button>

    <script>
        $(document).ready(function(){
            $("#click-me").on("click", function(){
                alert("Button clicked!");
            });
        });
    </script>
</body>
</html>

Этот пример показывает, как обработать событие клика на кнопке с помощью jQuery, отображая всплывающее сообщение при нажатии.

Манипуляции с DOM

jQuery предоставляет множество методов для удобных манипуляций с DOM: .append(), .prepend(), .html(), .text(), .attr(), .css(), .addClass(), .remove() и другие.

<!DOCTYPE html>
<html>
<head>
    <title>jQuery DOM Manipulation</title>
    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
</head>
<body>
    <div id="container">
        <p>Initial Paragraph</p>
    </div>
    <button id="add-content">Add Content</button>

    <script>
        $(document).ready(function(){
            $("#add-content").click(function(){
                $("#container").append("<p>New Paragraph</p>");
            });
        });
    </script>
</body>
</html>

Этот пример иллюстрирует, как с помощью jQuery добавить новый контент к существующему элементу в DOM.

Цепочки вызовов методов

Большинство методов jQuery возвращают тот же объект jQuery, поэтому можно выстраивать цепочки вызовов и применять несколько операций к одному выделению в одном выражении. Это позволяет избежать повторного обращения к DOM и группирует связанные изменения вместе:

$("#card")
  .addClass("active")
  .css("color", "white")
  .text("Selected")
  .fadeIn(300);

Каждый вызов применяется к результату предыдущего, и всё читается сверху вниз как одно предложение.

jQuery vs. ванильный JavaScript

Если вы размышляете, стоит ли использовать библиотеку, вот как распространённые операции соотносятся с нативными эквивалентами, доступными в каждом современном браузере:

ЗадачаjQueryВанильный JavaScript
Выбрать все совпадения$(".item")document.querySelectorAll(".item")
Задать текст$(el).text("Hi")el.textContent = "Hi"
Добавить класс$(el).addClass("on")el.classList.add("on")
Добавить обработчик$(el).on("click", fn)el.addEventListener("click", fn)
Вставить HTML$(el).append("<p>x</p>")el.insertAdjacentHTML("beforeend", "<p>x</p>")
Найти ближайшего предка$(el).closest(".box")el.closest(".box")

Для новых проектов, рассчитанных на современные браузеры, нативного столбца, как правило, достаточно. Нативные паттерны описаны в разделе Техники работы с DOM.

Лучшие практики

  1. Обновляйте jQuery: всегда используйте последнюю версию jQuery, чтобы получать улучшения производительности и исправления безопасности.
  2. Используйте CDN: подключайте jQuery через Content Delivery Network (CDN) для ускорения загрузки и повышения вероятности кэширования в браузере пользователя.
  3. Минимизируйте использование jQuery: применяйте jQuery только тогда, когда он даёт очевидное преимущество перед ванильным JavaScript, особенно с учётом того, что современные браузеры эффективно поддерживают большинство стандартных операций с DOM.
  4. Выстраивайте цепочки методов: используйте возможность jQuery объединять методы в цепочку для получения более лаконичного и читаемого кода.
  5. Оптимизируйте селекторы: применяйте конкретные и эффективные селекторы, чтобы минимизировать накладные расходы на производительность.

Заключение

Использование библиотек, таких как jQuery, для работы с DOM может значительно улучшить рабочий процесс веб-разработки, предлагая упрощённый синтаксис, кросс-браузерную совместимость и расширенные возможности. Следуя лучшим практикам, вы гарантируете, что ваш код с применением этих библиотек будет эффективным, удобным в сопровождении и результативным. Используйте мощь библиотек для лёгкого создания динамичных и интерактивных веб-приложений.

Практика

Практика
Какие из следующих утверждений о библиотеках для работы с DOM верны?
Какие из следующих утверждений о библиотеках для работы с DOM верны?
Was this page helpful?