Dom7 — это компактная библиотека для работы с DOM в JavaScript, используемая в основном вместе с фреймворком Framework7, но также полезная как самостоятельный инструмент. Она предоставляет удобные методы для манипуляции элементами, обработки событий и работы с атрибутами. Встроенные методы Dom7 покрывают большинство типичных задач, но часто возникает необходимость расширить функциональность собственными методами.
Dom7 построена как обертка вокруг массива DOM-элементов. Любой
объект, возвращаемый вызовом Dom7(), фактически является
массивоподобным объектом, к которому применяются методы библиотеки. Для
добавления новых методов используется статический метод
Dom7.fn или свойство Dom7.prototype, которое
позволяет определять функции, доступные для всех экземпляров Dom7.
Простейший синтаксис добавления пользовательского метода выглядит так:
Dom7.fn.myCustomMethod = function(param) {
return this.each((el, index) => {
// Действия с каждым элементом
el.textContent = `Элемент ${index}: ${param}`;
});
};
this внутри метода ссылается на текущую коллекцию
элементов Dom7.each позволяет перебирать все элементы коллекции,
передавая каждый элемент и его индекс в функцию обратного вызова.return this в конце метода обеспечивает цепочку
вызовов, что является ключевой практикой в Dom7.После добавления метода можно вызвать его как любой встроенный метод Dom7:
const $items = Dom7('.item');
$items.myCustomMethod('Пример');
Каждый элемент с классом .item получит текст
Элемент 0: Пример, Элемент 1: Пример и так
далее. Цепочка вызовов сохраняется:
$items
.myCustomMethod('Тест')
.addClass('highlight')
.css('color', 'red');
Это делает пользовательские методы полностью совместимыми с остальными функциями библиотеки.
Не всегда требуется изменять элементы. Иногда нужно получить
информацию из коллекции. В таких случаях метод может возвращать
значения, а не this.
Dom7.fn.getTextArray = function() {
const result = [];
this.each(el => {
result.push(el.textContent);
});
return result;
};
const texts = Dom7('.item').getTextArray();
console.log(texts); // ["Элемент 0", "Элемент 1", ...]
Важно: методы, возвращающие данные, разрывают цепочку вызовов, поэтому их стоит использовать в конце цепочки.
Пользовательский метод может включать сложную логику и дополнительные параметры:
Dom7.fn.toggleClassByCondition = function(className, conditionFn) {
return this.each((el, index) => {
if (conditionFn(el, index)) {
el.classList.add(className);
} else {
el.classList.remove(className);
}
});
};
// Применение
Dom7('.item').toggleClassByCondition('active', (el, i) => i % 2 === 0);
В этом примере метод добавляет или удаляет класс active
в зависимости от результата функции conditionFn.
Пользовательские методы Dom7 могут быть организованы в виде небольших плагинов:
(function($) {
$.fn.colorize = function(options) {
const settings = Object.assign({color: 'blue', fontSize: '16px'}, options);
return this.each(el => {
el.style.color = settings.color;
el.style.fontSize = settings.fontSize;
});
};
})(Dom7);
// Использование
Dom7('.item').colorize({color: 'green', fontSize: '20px'});
Такой подход позволяет создавать переиспользуемые расширения, которые легко подключать в разных проектах.
this.each или стандартные
циклы — это гарантирует обработку всех элементов
коллекции.Dom7 позволяет создавать методы, которые интегрируются с обработкой событий:
Dom7.fn.onClick Log = function(message) {
return this.each(el => {
el.addEventListener('click', () => {
console.log(message, el);
});
});
};
Dom7('.button').onClickLog('Нажата кнопка');
Метод становится полностью совместим с остальными инструментами Dom7, сохраняя удобство работы с коллекциями элементов.
Добавление пользовательских методов в Dom7 превращает библиотеку в гибкий инструмент, который можно адаптировать под любые задачи. Пользовательские методы могут:
Этот механизм расширения обеспечивает легкость масштабирования функционала без модификации исходного кода Dom7.