Dom7 — это легковесная библиотека для работы с DOM, созданная как ядро фреймворка Framework7, но используемая и отдельно для удобного манипулирования элементами страницы. Она обеспечивает удобный, цепочный синтаксис, позволяющий выполнять большинство операций с элементами без необходимости повторного поиска в DOM.
Библиотека ориентирована на работу с коллекциями элементов, что делает её схожей с jQuery, но при этом имеет меньший размер и более современный API. Основная идея Dom7 — предоставление методов для поискa, изменения атрибутов, работы с классами, событий и анимаций.
Для получения коллекции элементов используется функция
$:
var items = $('.item'); // выбор всех элементов с классом item
var main = $('#main'); // выбор элемента по id
Возвращаемый объект поддерживает цепочку вызовов, что позволяет комбинировать действия:
$('.item').addClass('active').css('color', 'red');
Dom7 предоставляет набор методов для управления классами и атрибутами:
addClass(className) — добавляет класс элементам
коллекцииremoveClass(className) — удаляет классtoggleClass(className) — переключает наличие
классаattr(attributeName, value) — устанавливает значение
атрибутаattr(attributeName) — получает значение атрибута
первого элементаПример:
$('#main').addClass('visible').attr('data-role', 'container');
Для изменения текста и HTML существует несколько методов:
html(content) — устанавливает HTML содержимоеtext(content) — устанавливает текстовое содержимоеappend(content) — добавляет внутрь элементаprepend(content) — вставляет в начало элементаremove() — удаляет элементы из DOMПример:
$('.list').append('<li>Новый элемент</li>');
Dom7 позволяет работать с событиями через методы on,
off, once и trigger:
on(event, handler) — добавляет обработчикoff(event, handler) — удаляет обработчикonce(event, handler) — добавляет одноразовый
обработчикtrigger(event, data) — инициирует событиеПример добавления события клика:
$('.button').on('click', function (e) {
e.preventDefault();
console.log('Кнопка нажата');
});
Dom7 предоставляет инструменты для перемещения элементов и работы с их соседями:
appendTo(target) — вставляет элементы внутрь
указанногоprependTo(target) — вставляет в начало указанногоinsertBefore(target) — вставляет перед указанным
элементомinsertAfter(target) — вставляет после указанного
элементаnext() и prev() — навигация по соседним
элементамparent() и parents() — получение
родительских элементовПример:
$('<p>Привет</p>').appendTo('#container');
Одним из ключевых аспектов Dom7 является возможность создания собственных плагинов и расширений, при этом не затрагивая глобальные методы или другие части библиотеки. Такой подход обеспечивает изоляцию расширений и предотвращает конфликты имен.
Создание расширения осуществляется через метод $.fn:
$.fn.highlight = function(color) {
return this.each(function() {
$(this).css('background-color', color);
});
};
После этого метод highlight доступен для всех объектов
Dom7:
$('.item').highlight('yellow');
Использование each() внутри расширений гарантирует, что
функция будет применена к каждому элементу коллекции,
сохраняя цепочность вызовов.
Для полной изоляции рекомендуется:
thisПример безопасного расширения с аргументами по умолчанию:
$.fn.fadeOutCustom = function(duration = 400) {
return this.each(function() {
$(this).css('transition', `opacity ${duration}ms`);
$(this).css('opacity', 0);
setTimeout(() => $(this).hide(), duration);
});
};
Такой подход позволяет создавать функциональные и независимые модули, которые могут быть подключены в любом проекте без риска конфликтов с другими расширениями или библиотеками.
eachМетод each является фундаментальным для изоляции
расширений, так как позволяет выполнять действия на каждом
элементе выборки индивидуально:
$('.item').each(function(index, el) {
$(el).text(`Элемент №${index + 1}`);
});
Использование index и el позволяет
управлять содержимым и атрибутами конкретного элемента без вмешательства
в другие элементы коллекции.
Dom7 совместим с большинством современных JavaScript библиотек, так как возвращает объекты, похожие на массивы. Однако при создании расширений важно не модифицировать прототипы глобальных объектов, чтобы сохранить изоляцию и совместимость.
Пример безопасного добавления метода, не влияющего на глобальный объект Array:
$.fn.doubleText = function() {
return this.each(function() {
let current = $(this).text();
$(this).text(current + current);
});
};
Метод действует только на объекты Dom7, не вмешиваясь в стандартные массивы.
Основные принципы изоляции расширений в Dom7:
$.fn для расширения
функциональности.each() для работы с каждым
элементом коллекции.Эти принципы позволяют создавать надёжные, модульные расширения, которые можно использовать в крупных проектах без риска конфликтов и неожиданных ошибок.