Dom7 — это лёгкая и удобная библиотека для работы с DOM, часто
используемая в связке с фреймворком Framework7, но полностью
функциональная и самостоятельно. Одной из часто используемых операций
при манипуляции элементами является поиск ближайшего родителя,
соответствующего определённому селектору. Dom7 предоставляет для этого
специализированный метод closest().
closest()Метод closest() используется для поиска ближайшего
родительского элемента (ancestor) относительно выбранного элемента,
который соответствует заданному CSS-селектору. Этот метод является
аналогом стандартного Element.closest() в JavaScript, но
поддерживает работу сразу с коллекциями Dom7.
Синтаксис:
$(selector).closest(target)
selector — селектор или Dom7-элемент, от которого
начинается поиск.target — строка CSS-селектора, определяющая, какой
родитель нужно найти.Метод возвращает новый объект Dom7, содержащий найденные элементы. Если подходящих элементов нет, возвращается пустой объект Dom7.
const item = $('.child-item');
const parent = item.closest('.parent-container');
console.log(parent);
В этом примере для всех элементов с классом .child-item
будет найден ближайший родитель с классом
.parent-container.
const items = $('.list-item');
const parentLists = items.closest('.list');
parentLists.each((index, el) => {
console.log(el);
});
Здесь метод closest() применяется сразу ко всей
коллекции .list-item. Для каждого элемента из выборки будет
найден его ближайший родитель с классом .list.
$('.child').closest('.parent').addClass('highlight');
Этот вызов позволяет сразу найти родителя и добавить ему класс
.highlight. Метод closest() возвращает объект
Dom7, что делает возможной цепочку вызовов.
parent()Dom7 предоставляет метод parent(), который возвращает
непосредственного родителя элемента. В отличие от
parent(), метод closest() ищет любого
предка на любом уровне, который соответствует селектору.
Пример:
$('.child-item').parent(); // только ближайший прямой родитель
$('.child-item').closest('.parent-container'); // ближайший подходящий ancestor
Использование closest() предпочтительно, когда
неизвестна глубина вложенности между элементом и нужным родителем.
Метод closest() поддерживает любые селекторы, которые
разрешены в CSS, включая классы, идентификаторы, атрибуты и
псевдоклассы.
$('.child-item').closest('[data-role="container"]');
$('.child-item').closest('#main-section');
$('.child-item').closest('div.highlighted');
Это позволяет гибко искать родительские элементы по сложным критериям.
closest() всегда возвращает объект Dom7, что позволяет
продолжать цепочку вызовов, например, применять .find(),
.addClass() или .remove().closest()
вернёт его самого. Это отличие важно учитывать при логике
обработки.$('.button').on('click', function () {
const container = $(this).closest('.card');
container.toggleClass('active');
container.find('.card-content').slideToggle();
});
В этом примере при клике на кнопку внутри карточки выполняется поиск
ближайшего родителя .card, к которому применяются изменения
— добавление класса и показ/скрытие содержимого. Такой подход избавляет
от необходимости знать точную структуру DOM заранее и делает код более
универсальным.
Метод closest() в Dom7 является ключевым инструментом
для работы с вложенными элементами, обеспечивая простой и лаконичный
способ взаимодействия с родительскими элементами на любом уровне
DOM.