Метод $.closest() используется для поиска ближайшего
родительского элемента, который соответствует заданному CSS-селектору.
Он выполняет обратный поиск по дереву DOM, начиная с
текущего элемента и поднимаясь вверх к корневому элементу документа до
тех пор, пока не встретит совпадение. Если соответствующий элемент
найден, метод возвращает его; если нет — возвращает
null.
$.closest(element, selector)
Параметры:
element — DOM-элемент, от которого начинается
поиск.selector — строка CSS-селектора, который нужно найти
среди родителей.Возвращаемое значение: DOM-элемент, соответствующий
селектору, или null, если совпадений не найдено.
Начало поиска с текущего элемента. В отличие от
метода parentNode, $.closest() проверяет
сам элемент на соответствие селектору перед подъемом
вверх по дереву.
Возврат первого найденного совпадения. Поиск прекращается сразу после нахождения первого подходящего родителя.
Совместимость с любыми селекторами. Можно использовать классы, идентификаторы, атрибуты, псевдоклассы и сложные CSS-селекторы.
Возврат null при отсутствии
совпадений. Это упрощает проверку и предотвращает ошибки при
работе с результатом.
Пример 1. Поиск ближайшего родителя по классу:
let button = document.querySelector('.btn');
let form = $.closest(button, '.form-container');
console.log(form); // вернет родительский элемент с классом .form-container или null
Пример 2. Поиск по идентификатору:
let item = document.getElementById('item-42');
let section = $.closest(item, '#main-section');
console.log(section); // ближайший родитель с id="main-section"
Пример 3. Проверка наличия родителя с определенным атрибутом:
let span = document.querySelector('span');
let container = $.closest(span, '[data-role="card"]');
if (container) {
console.log('Найден контейнер:', container);
} else {
console.log('Контейнер не найден');
}
parentNode возвращает только
непосредственного родителя, без проверки селектора.closest в чистом JavaScript
(Element.closest()) аналогичен, но метод Bliss.js
обеспечивает однородный API с другими утилитами
библиотеки.$.parents() возвращает все
родительские элементы, соответствующие селектору, а не только
первый.element не должен быть null или
undefined. Перед вызовом $.closest()
нужно убедиться, что элемент существует.
Совместимость селекторов. Методы Bliss.js
используют стандартный querySelector, поэтому любые
корректные CSS-селекторы подходят, включая сложные комбинации.
Возврат элемента не создаёт копий. Метод возвращает ссылку на существующий элемент DOM. Любые изменения через результат сразу отражаются в документе.
Работа с документом. Если поиск достигнет корня
документа и совпадение не найдено, возвращается
null.
Навигация по структуре DOM. Быстро определить ближайший контейнер для событийной делегации.
Формы и интерфейсы. Удобно искать форму, таблицу или блок, в котором находится элемент, чтобы обновить данные или применить стили.
Обработка событий. При кликах или других событиях на вложенных элементах позволяет найти родительский блок, к которому нужно применить изменения.
let element = document.querySelector('.item');
let closestNative = element.closest('.container');
let closestBliss = $.closest(element, '.container');
console.log(closestNative === closestBliss); // true
Метод Bliss.js обеспечивает тот же результат, но гарантирует единый API, интегрированный с другими утилитами библиотеки, что делает код более читаемым и предсказуемым.
$.closest() для поиска одного
конкретного родителя, а $.parents() — для
получения всех соответствующих родителей.$.closest() для одного элемента; лучше сохранить результат
в переменную.null перед
выполнением операций с элементом.Метод $.closest() является мощным инструментом для
эффективного навигационного поиска в DOM, позволяя
писать лаконичный и безопасный код без ручного обхода родителей.