Библиотека Umbrella JS предоставляет компактный и удобный API для работы с DOM. Одной из ключевых возможностей является фильтрация выбранных элементов, что позволяет манипулировать только необходимыми узлами без лишних обходов и условий.
filter()Метод filter() используется для отбора элементов из
текущей коллекции на основе функции обратного вызова или CSS-селектора.
Он возвращает новую коллекцию Umbrella, содержащую
только те элементы, для которых условие выполняется.
Синтаксис:
u(selector).filter(callback);
u(selector).filter(cssSelector);
Параметры:
callback — функция, принимающая три аргумента:
element — текущий DOM-элемент;index — порядковый номер элемента в коллекции;array — исходная коллекция элементов.Должна возвращать true для включения элемента в новую
коллекцию и false для исключения.
cssSelector — строка с селектором CSS, по которому
производится фильтрация.
Пример использования с функцией:
u('li').filter(function(el, i) {
return i % 2 === 0; // оставляет только чётные элементы списка
});
Пример использования с селектором:
u('div').filter('.active'); // оставляет только элементы с классом active
not()Метод not() работает аналогично filter(),
но выполняет исключение элементов, соответствующих
условию. Он также принимает функцию обратного вызова или
CSS-селектор.
Синтаксис:
u(selector).not(callback);
u(selector).not(cssSelector);
Пример:
u('p').not('.highlight'); // выбирает все <p>, кроме тех, у которых класс highlight
Функция обратного вызова возвращает true для элементов,
которые должны быть исключены:
u('li').not(function(el, i) {
return i === 0; // исключает первый элемент списка
});
has()Метод has() позволяет фильтровать элементы, которые
содержат определённый потомок, соответствующий CSS-селектору.
Синтаксис:
u(selector).has(cssSelector);
Пример:
u('ul').has('li.selected'); // оставляет только <ul>, содержащие хотя бы один <li> с классом selected
Umbrella JS поддерживает цепочки вызовов, что позволяет комбинировать фильтры для более точного отбора элементов.
Пример:
u('div')
.filter('.container')
.not('.hidden')
.has('p');
В этом примере сначала выбираются все <div> с
классом container, затем исключаются скрытые
<div> с классом hidden, и из оставшихся
выбираются только те, которые содержат хотя бы один
<p>.
filter(), not() и has() для
короткого и читаемого кода, если фильтрация не требует сложной
логики.Выбор четных элементов списка, исключая скрытые и содержащие определённый текст:
u('li')
.filter(function(el, i) { return i % 2 === 0; })
.not('.hidden')
.filter(function(el) { return el.textContent.includes('JavaScript'); });
Выбор всех блоков с классом card, которые
содержат хотя бы один заголовок <h2> и не имеют
класса archived:
u('.card')
.has('h2')
.not('.archived');
Фильтрация выбранных элементов в Umbrella JS обеспечивает чистый, лаконичный и производительный способ управления DOM, позволяя работать исключительно с необходимыми узлами без создания лишних массивов или ручных циклов.