Библиотека Umbrella JS предоставляет удобный минималистичный интерфейс для работы с DOM. Одной из частых задач является определение того, существуют ли выбранные элементы и можно ли к ним применять дальнейшие операции. В отличие от полноценного фреймворка, Umbrella JS не вводит собственных типов null или undefined для отсутствующих узлов, а опирается на длину коллекции и ряд вспомогательных методов.
Функция выбора u(selector) возвращает объект-коллекцию,
содержащий найденные элементы. Отсутствие совпадений означает, что
коллекция пуста. Ключевой индикатор — свойство length.
Значение 0 определяет отсутствие элементов, любое
положительное число — успешный выбор.
Пример проверки:
if (u('.item').length > 0) {
/* элементы существуют */
}
Umbrella JS допускает цепочки методов, и многие операции автоматически возвращают пустую коллекцию при отсутствии совпадений. Это позволяет безопасно совмещать выборку с фильтрацией или наведением событий, однако иногда требуется прямое условие.
is()
как дополнительная проверкаМетод is() позволяет определить, соответствует ли
коллекция указанному селектору. В случае пустой выборки результат всегда
будет false, что фактически даёт косвенную проверку
существования:
if (u('.item').is('.item')) {
/* есть хотя бы один элемент */
}
Однако основной и наиболее прозрачно читаемый механизм — проверка длины.
Объект, возвращаемый Umbrella JS, не приводится к булевому значению
напрямую так, чтобы пустая коллекция интерпретировалась как
false. Логическое преобразование будет всегда истинным,
поскольку это объект. Поэтому idiomatic-подход, используемый в некоторых
других библиотеках, здесь не работает:
if (u('.item')) {
/* не гарантирует наличие элементов */
}
Для корректного условия следует проверять length.
В задачах, связанных с динамически добавляемыми или удаляемыми
элементами, проверка наличия может выполняться перед привязкой событий
или применением манипуляций к DOM. Например, перед использованием
addClass(), html(), on() и других
методов стоит убедиться, что выборка не пустая.
const items = u('.item');
if (items.length) {
items.addClass('active');
}
Umbrella JS не выбрасывает исключения при попытке выполнить методы над пустой коллекцией, но и эффекта от операции не будет. Именно поэтому проверка существования удобна для контроля бизнес-логики или визуальных состояний.
Особенность Umbrella JS заключается в том, что цепочки методов
продолжают возвращать объект-коллекцию вне зависимости от наличия
элементов. Это означает, что можно безопасно строить цепочки, но
конечный эффект окажется нулевым, если выборка пуста. Такой подход
хорошо подходит для лаконичных манипуляций, но при необходимости
ветвления логики применяется проверка length.
u('.item')
.addClass('selected')
.html('Готово');
Если .item отсутствует, код выполнится без ошибок, но
без изменений в DOM. Для осмысленного контроля применяется явная
проверка существования.
filter() и first() для уточнения условийМетоды filter() и first() применяются для
сокращения выборки и могут возвращать пустую коллекцию при отсутствии
совпадений. В таких случаях длина коллекции — снова главный инструмент
проверки.
const firstItem = u('.item').first();
if (firstItem.length) {
firstItem.addClass('highlight');
}
Такая практика характерна для операций выделения одного элемента.
Иногда требуется проверить не только факт наличия элементов, но и
доступность конкретного DOM-узла. Обращение к элементу по индексу
возможно через nodes, массивоподобное свойство
коллекции:
const el = u('.item').nodes[0];
if (el) {
el.setAttribute('data-state', 'ready');
}
Здесь проверка происходит уже на уровне нативного DOM, что может быть полезно в интеграциях с кодом без Umbrella JS.
Для операций вставки содержимого (append,
prepend, before, after) Umbrella
JS также не порождает ошибок при отсутствии узлов, но вставка будет
проигнорирована. Это может привести к скрытым логическим ошибкам,
поэтому контроль наличия элементов до вызова таких методов улучшает
предсказуемость поведения.
В отличие от jQuery, которая допускает использование конструкции вида
if ($('.item').length), Umbrella JS использует тот же
принцип, что делает перенос логики понятным и предсказуемым. Однако
отсутствуют некоторые дополнительные методы для проверки наличия
элементов напрямую, что сохраняет библиотеку лёгкой и
минималистичной.
length.filter(), first() и другие могут
возвращать пустую коллекцию и нуждаются в проверке длины.nodes[index].Такая модель делает работу с Umbrella JS безопасной при манипуляциях с DOM и позволяет контролировать поведение кода в динамических интерфейсах без лишних проверок и исключений.