Создание новых элементов в Cash-JS основано на лаконичном синтаксисе и строгом контроле над деревом DOM. Библиотека предоставляет минималистичный, но выразительный API, напоминающий jQuery, позволяя быстро генерировать структуру интерфейса и интегрировать её в существующий документ без избыточного кода.
Cash принимает HTML-строку и преобразует её в набор узлов:
const item = $('<li class="menu-item">Профиль</li>');
Полученный объект является коллекцией элементов, что позволяет сразу выполнять цепочки вызовов: назначать атрибуты, классы, обработчики событий и внедрять в DOM.
HTML-строка может содержать вложенные структуры:
const card = $(`
<div class="card">
<h2 class="card-title">Уведомления</h2>
<p class="card-text">Нет новых сообщений</p>
</div>
`);
Библиотека корректно парсит вложенность и возвращает единый набор узлов. В случае нескольких корневых элементов возвращается коллекция, позволяющая поочерёдное добавление каждого узла в дерево документа.
Cash поддерживает удобные методы для задания свойств и атрибутов сразу после создания:
const input = $('<input>')
.attr('type', 'text')
.attr('placeholder', 'Поиск')
.addClass('search-input');
Такой подход уменьшает количество строк и устраняет необходимость явного обращения к DOM API.
Благодаря компактности синтаксиса удобно собирать элементы на основе данных:
const users = ['Анна', 'Павел', 'Юлия'];
const list = $('<ul class="users-list">');
users.forEach(name => {
list.append($(`<li class="users-item">${name}</li>`));
});
Cash при каждом append корректно перемещает узлы,
поддерживая вложенные вставки и сохраняя порядок.
При построении интерфейса фрагментами следует учитывать, что Cash не
создаёт промежуточных DocumentFragment, как это делает
нативный DOM при использовании innerHTML, но за счёт
минимального лага при парсинге HTML-строки достигается сопоставимая
производительность. Генерация небольших компонентных блоков остаётся
предпочтительной, особенно при повторных вставках.
Иногда HTML-строка не подходит, например, при создании медиа-элементов или формовых узлов с контролем natively-only свойств. Cash допускает создание элементов через нативный DOM, а затем оборачивание:
const video = $(document.createElement('video'))
.attr('controls', true)
.attr('src', '/media/intro.mp4')
.addClass('player');
Данный метод снижает риск ошибок парсинга и сохраняет гибкость.
Генерация новых узлов сама по себе не изменяет документ. Коллекция
существует в памяти до момента явного добавления с помощью
append, prepend, before,
after или replaceWith. Это позволяет собирать
интерфейсные блоки заранее и внедрять в нужных местах по мере
необходимости.
Ключевой момент: повторные вставки одного и того же элемента
перемещают его, а не копируют. Для создания копий необходимо
использовать clone, что предотвращает неожиданные побочные
эффекты.
Для интерфейсов, требующих множественных экземпляров одного шаблона, рекомендуется клонирование:
const template = $('<button class="tag"></button>');
['CSS', 'JS', 'HTML'].forEach(tag => {
$('.tags').append(template.clone().text(tag));
});
Каждый вызов clone создаёт независимый экземпляр,
сохраняя классы, атрибуты и содержимое.
Для элементов, созданных из пустой строки или шаблона, используется
text или html:
const row = $('<div class="row">');
row.html('<strong>Город:</strong> Москва');
Метод text безопаснее для данных, так как экранирует
HTML:
$('<span>').text('<admin>');
Созданные элементы ведут себя как коллекции. Возможно назначение данных, обработчиков событий, а также массовые операции:
const buttons = $(`
<button class="action">Удалить</button>
<button class="action">Изменить</button>
`);
buttons.on('click', e => {
console.log('clicked', e.target);
});
Каждая кнопка получает обработчик без дополнительного кода.
В рамках компонентного подхода Cash часто используется поверх шаблонных функций. Генерация HTML выполняется в строке или посредством функций, возвращающих Cash-коллекции. Такой подход обеспечивает чистоту разделения данных и представления и упрощает последующие модификации DOM.
Генерация элементов в Cash служит основой для большинства операций: вставки узлов, упаковки интерфейсных компонентов, декларативной сборки списков, карточек и форм. Упор делается на краткость цепочек и предсказуемость манипуляций с DOM, что уменьшает вероятность некорректной модификации дерева документа и облегчает поддержку кода.