Isotope предоставляет мощный механизм фильтрации элементов на основе
их атрибутов, включая произвольные data-* атрибуты. Такой
подход позволяет динамически управлять отображением контента без
изменения структуры HTML, сохраняя чистоту разметки и повышая гибкость
интерфейса.
Для работы с data-атрибутами важно понимать, что Isotope использует
CSS-селекторы в методе filter(). Любой
атрибут HTML можно использовать в селекторе через квадратные скобки:
// Фильтрация элементов с data-category="photo"
$grid.isotope({ filter: '[data-category="photo"]' });
Здесь [data-category="photo"] – стандартный CSS-селектор
атрибута, который Isotope интерпретирует для отображения только
подходящих элементов.
Фильтрация по нескольким атрибутам возможна через комбинацию селекторов:
// Элементы с data-category="photo" и data-status="published"
$grid.isotope({ filter: '[data-category="photo"][data-status="published"]' });
Важно соблюдать порядок и синтаксис селекторов, так как Isotope использует стандартные правила CSS для сопоставления элементов.
Для более гибкого управления фильтрацией часто используют переменные для составления селектора:
let category = 'photo';
let status = 'published';
let filterValue = `[data-category="${category}"][data-status="${status}"]`;
$grid.isotope({ filter: filterValue });
Такой подход позволяет изменять параметры фильтрации в зависимости от пользовательских действий или данных с сервера, не меняя код вызова Isotope.
Иногда необходимо фильтровать элементы, у которых атрибут соответствует одному из нескольких значений. В CSS это реализуется через запятую:
// Фильтрация элементов с data-category="photo" или "video"
$grid.isotope({ filter: '[data-category="photo"], [data-category="video"]' });
Isotope корректно интерпретирует такую запись и отобразит все элементы, соответствующие хотя бы одному из условий.
Isotope поддерживает фильтры в виде функций, что позволяет реализовать сложные проверки, выходящие за рамки CSS-селекторов:
$grid.isotope({
filter: function() {
let category = this.getAttribute('data-category');
let status = this.getAttribute('data-status');
return category === 'photo' && status === 'published';
}
});
Преимущество такого подхода — возможность использовать произвольную логику, например, регулярные выражения или динамическое сравнение числовых значений.
Иногда data-атрибут содержит числовые значения, и требуется отфильтровать элементы по диапазону:
$grid.isotope({
filter: function() {
let price = parseFloat(this.getAttribute('data-price'));
return price >= 100 && price <= 500;
}
});
Здесь Isotope позволяет отфильтровать элементы на основе вычислений, что невозможно сделать стандартными CSS-селекторами.
Для фильтрации на основе data-атрибутов удобно использовать кнопки или выпадающие списки. Например:
$('.filter-button').on('click', function() {
let filterCategory = $(this).attr('data-filter');
$grid.isotope({ filter: `[data-category="${filterCategory}"]` });
});
Комбинация динамического выбора и data-атрибутов обеспечивает полностью интерактивный интерфейс, где каждый элемент может иметь множество атрибутов для фильтрации.
data-cat, data-status) для повышения
производительности селекторов.Фильтрация по data-атрибутам в Isotope сочетает простоту CSS-селекторов с мощью функций для динамической логики. Такой подход позволяет создавать гибкие и масштабируемые интерфейсы с возможностью множественных условий, диапазонов и пользовательских фильтров без изменения исходной разметки HTML.