DocumentFragment — это лёгкий контейнер для хранения фрагментов DOM, который позволяет создавать и манипулировать элементами без немедленного добавления их в основной документ. Использование DocumentFragment уменьшает количество перерасчётов стилей и перерисовок, что критично для производительности при работе с большим количеством элементов. Bliss.js предоставляет удобные методы для работы с этим объектом, интегрируя его с привычными селекторами и цепочкой вызовов.
В стандартном JavaScript DocumentFragment создаётся
через document.createDocumentFragment(). Bliss.js
оборачивает этот процесс в собственный API, позволяя создавать фрагменты
и сразу работать с их содержимым:
const fragment = Bliss.createFragment();
fragment.append('<div class="item">Элемент 1</div>');
fragment.append('<div class="item">Элемент 2</div>');
Метод createFragment возвращает объект, поддерживающий
методы append, prepend, find,
remove и другие, как у обычного DOM-элемента в Bliss.js.
Это позволяет добавлять элементы динамически, строя структуру фрагмента
до вставки в документ.
Bliss.js позволяет добавлять как строки HTML, так и уже существующие элементы. Основные методы:
Пример комбинирования нескольких методов:
const fragment = Bliss.createFragment()
.append('<li>Пункт 1</li>')
.append('<li>Пункт 2</li>');
fragment.appendTo(document.querySelector('#list'));
После вызова appendTo фрагмент перемещает все дочерние
элементы в указанный контейнер. Важно: сам
DocumentFragment очищается после вставки, оставляя элементы в DOM.
Bliss.js позволяет работать с элементами фрагмента так же, как с обычными DOM-узлами, используя методы find, each, attr, css и другие.
const fragment = Bliss.createFragment();
fragment.append('<div class="card">Контент</div>');
fragment.append('<div class="card">Другой контент</div>');
fragment.find('.card').each(el => {
el.classList.add('highlight');
el.style.border = '1px solid #333';
});
Использование метода find возвращает объект Bliss.js,
обернутый вокруг всех совпавших элементов внутри фрагмента, что
обеспечивает удобную цепочку вызовов и единообразное API.
Вставка фрагмента в документ возможна несколькими способами:
Пример использования insertBefore:
const fragment = Bliss.createFragment()
.append('<p>Новый параграф</p>');
const reference = document.querySelector('#reference');
fragment.insertBefore(reference);
Фрагмент сам управляет перемещением своих элементов, что делает код более чистым и предотвращает необходимость ручного перебора дочерних узлов.
Bliss.js позволяет привязывать обработчики событий к элементам фрагмента до их добавления в DOM. Это снижает количество операций после вставки.
const fragment = Bliss.createFragment()
.append('<button>Нажми меня</button>');
fragment.find('button').on('click', () => alert('Кнопка нажата'));
fragment.appendTo(document.body);
Обработчики будут работать корректно после вставки, поскольку Bliss.js сохраняет ссылки на элементы фрагмента.
При необходимости вставки множества элементов DocumentFragment обеспечивает существенную оптимизацию:
Пример генерации длинного списка:
const fragment = Bliss.createFragment();
for (let i = 1; i <= 1000; i++) {
fragment.append(`<li>Элемент ${i}</li>`);
}
fragment.appendTo(document.querySelector('#largeList'));
Без использования фрагмента браузер бы выполнял 1000 отдельных вставок, что сильно замедлило бы отображение.
Bliss.js удобно использовать совместно с шаблонными строками или сторонними шаблонизаторами:
const items = ['Яблоко', 'Банан', 'Вишня'];
const fragment = Bliss.createFragment();
items.forEach(item => {
fragment.append(`<li>${item}</li>`);
});
fragment.appendTo(document.querySelector('#fruits'));
Такой подход позволяет строить сложные списки и таблицы динамически, сохраняя чистый и оптимизированный код.
DocumentFragment, делая API более гибким и
единообразным.DocumentFragment в Bliss.js сочетает преимущества стандартного DOM-фрагмента с удобным интерфейсом библиотеки, позволяя создавать, модифицировать и вставлять большие структуры эффективно и читаемо.