CSS-селекторы в Umbrella JS основаны на стандартном синтаксисе CSS и
предоставляют удобный интерфейс для выборки элементов в документе.
Основной объект создаётся вызовом функции u(), принимающей
селектор или DOM-элемент.
Поддерживаются все типичные варианты, известные по
querySelectorAll:
div, p,
span).item, .active)#header,
#main)ul.menu li.active,
#sidebar .widget)u('.item') // коллекция всех элементов с классом .item
u('#header') // элемент с id="header"
u('ul.menu li')// вложенный селектор
Коллекция, возвращаемая u(), всегда ведёт себя как
массивоподобный объект со множеством вспомогательных методов.
Umbrella JS корректно обрабатывает селекторы по атрибутам:
u('input[type="text"]')
u('a[target="_blank"]')
u('[data-role]')
Используются возможности CSS-селектора для фильтрации по
существованию атрибута, его значению или части значения
(^=, *=, $= и т.д.).
Допускается применение стандартных псевдоклассов CSS:
:first-child, :last-child,
:nth-child, :not() и других. Это позволяет
формировать выборки, которые сложно реализовать простым перебором:
u('li:not(.active)')
u('tr:nth-child(odd)')
Umbrella не реализует собственные псевдоклассы, а полагается на движок браузера.
Возможна передача контекста, ограничивающего область выборки. Контекст задаётся вторым аргументом:
u('.item', '#content')
В данном случае поиск будет выполнен внутри #content, а
не по всему документу. Такой подход снижает количество совпадений и
сокращает вычислительную нагрузку при сложных деревьях.
Функция u() принимает не только строку с селектором, но
и:
const el = document.querySelector('#main')
u(el)
const nodes = document.querySelectorAll('.group')
u(nodes)
Это даёт возможность интегрировать библиотеку в существующий код, где уже используются нативные методы выбора.
В стандартный набор CSS-селекторов не входит поиск по тексту, но
Umbrella предоставляет фильтрацию через метод filter().
Например, отбор элементов, содержащих подстроку:
u('li').filter(el => el.textContent.includes('JS'))
В отличие от jQuery, здесь отсутствуют псевдоселекторы вроде
:contains(). Эквивалент достигается через произвольную
функцию.
При изменении DOM, например после вставки элементов или асинхронных
операций, вызов u() заново формирует набор. Коллекция не
отслеживает изменения автоматически, поэтому динамические интерфейсы
требуют повторных выборов.
u('#list').append('<li>New</li>')
u('#list li') // повторная выборка с учётом новых узлов
Такая стратегия упрощает реализацию и избегает скрытых побочных эффектов.
Часто требуется не просто выбрать элементы, но и выполнить над ними последовательность действий: фильтрацию, модификацию, работу с атрибутами, событиями. Селектор становится первым звеном в цепочке:
u('ul.menu li')
.not('.disabled')
.addClass('active')
Методы not(), filter(), find()
и children() расширяют возможности CSS-селектора за счёт
программной фильтрации и навигации.
Метод find() соответствует querySelectorAll
относительно каждого найденного элемента:
u('.card').find('.title')
Если элементы .card содержат дочерние
.title, будет сформирована итоговая коллекция со всеми
найденными совпадениями.
Для обратной связи используется parent() и
closest():
u('.title').closest('.card')
Здесь выбирается ближайший родитель, соответствующий селектору. Это облегчает построение логики интерфейса без сложной ручной навигации.
Umbrella использует нативный API браузера, что обеспечивает
совместимость с различными платформами. Однако ряд нестандартных
расширений CSS, свойственных отдельным движкам, отсутствует. Библиотека
придерживается того же уровня поддержки селекторов, что и
querySelectorAll в текущем окружении.
При необходимости поиска, выходящего за рамки CSS-селектора, применяется комбинирование селекторов с функциями фильтрации и перебора. Такой подход делает код явным и контролируемым, особенно при работе со специфическими структурами DOM.
filter(), not(),
find(), closest()