Небольшой учебник по созданию пользовательских фильтров для элементов DOM
ШАГ 1
Импорт List.js и RxJS
В пользовательском коде вашей страницы внутри тега ‹head›
<script src="//cdnjs.cloudflare.com/ajax/libs/list.js/1.5.0/list.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.2/rxjs.umd.js"></script>
ШАГ 2
Написать собственный код
В пользовательском коде вашей страницы перед тегом ‹/body›
<script> var options = { valueNames: [ 'gender', 'lang', ], }; const masterDivId = 'stroumphs'; const observer = new MutationObserver(function(mutations, MO) { const masterDiv = document.getElementById(masterDivId); if (masterDiv && masterDiv.childNodes) { MO.disconnect(); // stop observing handleList(); return; } }); // start observing observer.observe(document, { childList: true, subtree: true, }); const handleList = function() { const itemsList = new List(masterDivId, options); const filters = [].reduce.call( document.getElementsByClassName('filters'), function(acc, el) { if (acc[el.id] == undefined) { acc[el.id] = new rxjs.BehaviorSubject(undefined); } rxjs.fromEvent(el, 'change').subscribe(function(event) { acc[el.id].next(event.target.value || undefined); }); return acc; }, {}, ); document.getElementById('reset').addEventListener('click', function() { itemsList.filter(); }); const mergedObservable = rxjs.combineLatest.apply( null, Object.values(filters), ); mergedObservable.subscribe(function(values) { itemsList.filter(function(item) { const values = item.values(); return Object.entries(filters).reduce(function(acc, filter) { const filterName = filter[0].replace('filter', '').toLowerCase(); if (!acc) return false; if ( filter[1].getValue() == undefined || values[filterName] .toLowerCase() .match(filter[1].getValue().toLowerCase()) ) { return true; } return false; }, true); }); }); }; </script>
Options представляет ключи вашего объекта
Константа «masterDivId» — это идентификатор вашей оболочки списка коллекций div.
Затем ваш div Collection List должен быть связан с классом «.list» (для работы list.js)
ШАГ 3
Создать форму фильтра
На своей странице создайте форму с вашими фильтрами
И воздействовать на селектор класса «.filters» (для анализа кодом шага 2). Дайте им идентификатор, соответствующий ключу вашей коллекции для фильтрации (например, filterGender или filterLang).
ШАГ 4
Добавьте предметы вашей коллекции
Под списком коллекций поместите элемент с именем класса, соответствующим вашим ключам для фильтрации.
НАСЛАЖДАЙТЕСЬ БЕСПЛАТНЫМИ СОБСТВЕННЫМИ ФИЛЬТРАМИ ДЛЯ WEBFLOW!