Цепочки методов

Umbrella JS строится вокруг идеи непрерывного преобразования коллекций DOM-элементов. Каждая операция возвращает новый объект Umbrella, позволяя последовательно наслаивать действия. Такой подход минимизирует использование промежуточных переменных и делает код компактнее.

Базовый принцип

Цепочка состоит из вызовов методов, каждый из которых манипулирует текущим набором элементов или извлекает из него данные. Большинство методов возвращают экземпляр u(), что формирует fluent-интерфейс. Исключением являются методы, возвращающие примитивы или специфические объекты; их применение завершает цепочку.

Селекция и фильтрация

Начальная выборка выполняется при помощи u(selector). Далее часто идут фильтрующие методы:

  • filter() — оставляет элементы, удовлетворяющие условию.
  • not() — исключает элементы по селектору или функции.
  • find() — углубляется вниз по дереву DOM, формируя новый набор элементов.
  • closest() — двигается вверх до первого подходящего предка.

Цепочка может выглядеть линейной, но фактически формирует последовательность уточнений над исходной коллекцией.

Манипуляции с атрибутами и содержимым

После уточнения коллекции следуют операции изменения:

  • addClass(), removeClass(), toggleClass() — модификация классов.
  • attr(), removeAttr() — управление атрибутами.
  • html(), text() — работа с внутренним содержимым.
  • data() — чтение и запись в data-* атрибуты.

Каждая операция возвращает обновлённый объект Umbrella, и цепочка продолжается без разрывов.

Инъекция и перестановка узлов

Вставка новых элементов происходит через:

  • append(), prepend() — добавляют потомков.
  • before(), after() — вставляют соседние элементы.
  • wrap(), unwrap() — оборачивают текущие элементы и снимают обёртку.

Отличительная особенность — одинаковая форма вызова при работе с HTML-строками, узлами и другими коллекциями Umbrella.

Обработка событий внутри цепочки

Подключение слушателей событий органично вписывается в цепочку:

  • on(type, handler) — подписывается на событие.
  • off(type, handler) — снимает обработчик.
  • trigger(type) — инициирует событие программно.

События не нарушают непрерывность, позволяя объединять логику выборки, подготовки и реакции внутри одного выражения.

Извлечение данных и завершение цепочки

Некоторые методы возвращают данные, завершая цепочку:

  • first(), last() — извлекают единичный элемент.
  • size() — число элементов.
  • attr(), data(), html(), text() при вызове без второго аргумента — чтение значений.

После такого вызова fluent-цепочка перестаёт быть доступной, и требуется новая селекция через u() или применение методов к возвращённому результату.

Комбинаторика и выразительность

Цепочки позволяют строить выразительные конструкции, объединяя выборку, фильтрацию, модификацию и событийну логику в одном фрагменте. Поддерживаются вложенные вызовы u() для побочных выборок и вставок. Важный момент — операции не мутируют исходные коллекции Umbrella, а формируют новые.

Совместимость и расширяемость

Расширение API достигается через u.prototype. Новые методы, корректно возвращающие this, автоматически становятся участниками цепочек. Это даёт возможность адаптировать библиотеку под конкретные задачи, сохраняя единый стиль fluent-вызовов.

Оптимизация и читаемость

Несмотря на компактность, чрезмерно длинные цепочки усложняют восприятие. Практика группировки однородных операций и вынесения сложных частей в вспомогательные функции позволяет сохранить читаемость. Внутри Umbrella методы стараются избегать лишнего обхода DOM, что делает цепочки не только выразительными, но и достаточно производительными.