Bliss.js предоставляет мощный и лаконичный инструмент для работы с DOM и коллекциями элементов. Одной из ключевых возможностей является фильтрация коллекций, позволяющая выбирать элементы по заданным критериям без необходимости вручную перебираать массивы или использовать сложные циклы.
filterМетод filter в Bliss.js работает аналогично стандартному
Array.prototype.filter, но применяется к коллекции
элементов DOM, возвращаемой библиотекой. Он принимает в качестве
аргумента функцию-колбэк, которая получает каждый элемент коллекции и
должна возвращать true или false в зависимости
от того, должен ли элемент оставаться в результирующей выборке.
// Пример: выбрать все элементы <li> с классом "active"
const activeItems = bliss.$$('li').filter(el => el.classList.contains('active'));
Ключевые моменты:
true сохраняет элемент в новой
коллекции.false исключает элемент из
выборки.Bliss.js позволяет комбинировать фильтрацию с CSS-селекторами для более точного отбора элементов. Это удобно, когда нужно выбирать элементы по сложным условиям, не создавая дополнительных массивов.
// Выбрать все <div> внутри .container, которые содержат <p> с текстом
const filtered = bliss.$$('.container div').filter(div => div.querySelector('p'));
querySelector проверяет наличие вложенного
элемента.id,
className, dataset,
textContent.Bliss.js упрощает работу с атрибутами и состояниями элементов. С
помощью метода filter можно легко отбирать элементы с
определёнными атрибутами или состояниями.
// Выбрать все кнопки, которые отключены
const disabledButtons = bliss.$$('button').filter(btn => btn.disabled);
// Элементы с определённым атрибутом data-role
const adminElements = bliss.$$('[data-role]').filter(el => el.dataset.role === 'admin');
Особенности:
dataset позволяет читать любые
data-* атрибуты.disabled, checked,
selected, доступны напрямую.Коллекции Bliss.js поддерживают метод цепочек, что позволяет
комбинировать фильтрацию с другими методами, например,
addClass, removeClass, each,
find.
// Добавить класс "highlight" ко всем активным элементам списка
bliss.$$('li')
.filter(el => el.classList.contains('active'))
.addClass('highlight');
Функция фильтрации может содержать произвольные логические условия, позволяя реализовать сложные сценарии отбора.
const specialItems = bliss.$$('li').filter(el =>
el.classList.contains('active') && el.dataset.priority === 'high'
);
&&, ||, !.textContent.includes.Bliss.js оптимизирует работу с коллекциями, и фильтрация не требует преобразования коллекции в массив вручную. Это снижает нагрузку на память и повышает скорость при работе с большими списками элементов.
filter элементы перебираются напрямую, без
лишнего копирования.const requiredFields = bliss.$$('input, textarea')
.filter(field => field.required && !field.value);
const visibleItems = bliss.$$('.item')
.filter(item => item.offsetWidth > 0 && item.offsetHeight > 0);
const featuredArticles = bliss.$$('.article')
.filter(article => article.dataset.featured === 'true')
.addClass('highlighted');
Фильтрация коллекций в Bliss.js объединяет лаконичность синтаксиса и
гибкость стандартного filter, адаптированного для работы с
DOM. Она позволяет создавать динамические интерфейсы, управлять
состояниями элементов и эффективно взаимодействовать с большим
количеством элементов на странице.