Umbrella JS использует краткий и выразительный синтаксис для выборки
элементов DOM. Основой служит функция u(), принимающая
CSS-селектор, ноду или коллекцию нод. Результатом является
объект-обёртка, предоставляющий богатый интерфейс для манипуляций.
Выборка не создаёт собственных копий элементов; внутри хранится массив ссылок на реальные DOM-узлы. Это позволяет работать эффективно, избегая лишних дубликатов и преобразований.
Использование CSS-селектора:
var links = u('a');
Возвращается объект, содержащий все элементы <a>
на странице. Поддерживаются те же правила селекторов, что и в CSS:
классы, идентификаторы, комбинированные селекторы и псевдоклассы, если
они применимы для выборки.
u() принимает одиночный DOM-элемент,
NodeList, HTMLCollection или массив нод:
var node = document.querySelector('#main');
var wrapper = u(node);
var list = document.querySelectorAll('.item');
var wrapperList = u(list);
Поддержка различных типов входных данных снижает необходимость ручных преобразований.
Контекстом считается результат предыдущей выборки. Метод
find() позволяет получить подмножество элементов:
var parent = u('#menu');
var items = parent.find('li');
Контекст обеспечивает изоляцию выборки относительно конкретного DOM-поддерева и исключает нежелательные совпадения.
Фильтрация осуществляется методом filter(), принимающим
селектор или функцию:
var active = u('.tab').filter('.active');
При передаче функции каждый элемент проверяется на соответствие условию. Результатом становится новая выборка с сохранённой цепочностью вызовов.
Метод not() формирует выборку, исключая элементы по
селектору или функции:
var visible = u('.box').not('.hidden');
Этот приём удобен при необходимости быстрого отсечения части коллекции.
Метод closest() поднимается по дереву DOM и находит
ближайший элемент, удовлетворяющий селектору:
var section = u('.btn').closest('section');
Результат всегда представляется в виде новой выборки, даже если найден один узел.
Методы parent(), children() и
siblings() предоставляют удобную навигацию по
структуре:
var parents = u('.item').parent();
var kids = u('#main').children();
var neighbors = u('#active').siblings();
parent() возвращает непосредственных родителей,
children() — прямых потомков, siblings() —
соседей на одном уровне.
Обращение по индексу выполняется методом eq():
var first = u('.card').eq(0);
Индекс поддерживает отрицательные значения, что упрощает доступ к элементам с конца коллекции.
При необходимости можно получить обычный массив DOM-узлов методом
nodes или с помощью toArray():
var arr = u('.link').toArray();
Преобразование полезно при использовании нативных методов массивов или сторонних утилит.
Все методы возвращают новую выборку или ту же выборку после изменения, что позволяет строить цепочки:
u('#main')
.find('a')
.filter('.external')
.eq(0)
.parent();
Цепочность обеспечивает читаемость, минимизирует промежуточные переменные и формирует выразительный стиль работы с DOM.
find() и навигация по DOM.Синтаксис выборки Umbrella JS формирует компактный и выразительный подход к работе с DOM, сохраняя совместимость с привычными концепциями нативного JavaScript и CSS.