Dom7 — это легковесная библиотека для работы с DOM, активно используемая во фреймворке Framework7. Одной из ключевых особенностей является поддержка цепочек вызовов (method chaining), которая позволяет выполнять несколько операций над элементами DOM последовательно, без повторного обращения к объекту выборки. Цепочка вызовов повышает читаемость кода и сокращает количество временных переменных.
$$('div.item')
.addClass('active')
.css('color', 'red')
.attr('data-status', '1');
В этом примере к элементам с классом item
последовательно применяются методы addClass,
css и attr. Каждый метод возвращает объект
Dom7, что позволяет продолжать цепочку.
Dom7 строится по принципу фасада над массивом
элементов. Любая выборка $$('селектор') возвращает
объект, который похож на массив:
$$('div')[0].Методы можно разделить на три категории с точки зрения возвращаемого значения:
Методы, возвращающие Dom7 для цепочки:
addClass(), removeClass(), css(),
attr(), html(), append(),
prepend(), on(), off().
Использование этих методов не прерывает цепочку.
Методы, возвращающие данные о элементах:
css('color'), attr('id'),
width(), height(), index(). Эти
методы возвращают конкретное значение, а не объект Dom7, поэтому цепочка
завершается.
Методы для навигации по DOM:
parent(), children(), siblings(),
next(), prev(). Эти методы возвращают новый
объект Dom7 с выбранными элементами, что позволяет продолжить
цепочку.
$$('.card')
.css({
border: '1px solid #ccc',
padding: '10px'
})
.attr('data-active', 'true')
.addClass('highlighted');
Каждый метод последовательно обрабатывает коллекцию
.card. Такой подход исключает необходимость писать
многократные циклы for или создавать временные переменные
для каждой операции.
$$('button.toggle')
.on('click', function () {
$$(this).closest('.panel').toggleClass('open');
})
.css('cursor', 'pointer');
Здесь on() возвращает объект Dom7, что позволяет сразу
применить метод css(). Элементы остаются доступными для
дальнейшей обработки.
$$('.item.active')
.next()
.addClass('next-item')
.siblings()
.removeClass('highlight');
Сначала выбирается следующий элемент после .item.active,
затем к нему применяется класс next-item, после чего с
помощью siblings() можно обработать остальные элементы на
том же уровне DOM.
Dom7 позволяет расширять функциональность с помощью пользовательских плагинов. Любой метод, который возвращает объект Dom7, может быть включен в цепочку:
Dom7.prototype.toggleVisibility = function () {
return this.each(function (el) {
if (el.style.display === 'none') el.style.display = '';
else el.style.display = 'none';
});
};
$$('.menu-item')
.toggleVisibility()
.addClass('processed');
Метод toggleVisibility применяет действие к каждому
элементу и возвращает объект Dom7, что позволяет продолжать цепочку
вызовов.
$$('селектор').parent,
children, siblings) внутри цепочки, чтобы
работать с элементами без повторного вызова селектора.each как часть
цепочкиМетод each позволяет выполнять произвольную функцию для
каждого элемента в коллекции, при этом сохраняя возможность
продолжить цепочку:
$$('.list-item')
.each(function (el, index) {
el.textContent = `Элемент ${index + 1}`;
})
.addClass('numbered');
Использование each особенно полезно для сложной логики,
которая не может быть реализована стандартными методами Dom7.
Chaining в Dom7 — это не просто удобный синтаксис, а фундаментальный механизм, позволяющий строить гибкие, структурированные и легко поддерживаемые сценарии работы с DOM.