Рабочая кодовая ручка
Сначала добавьте идентификатор в каждый раскрывающийся список, чтобы мы могли различать guish их.
<select id="menu-selector" class="filter option-set" data-filter-group="menu">
[...]
<select id="type-selector" class="filter option-set" data-filter-group="categories">
Затем для каждого раскрывающегося списка добавьте прослушиватель изменений. Мы рассмотрим код для прослушивателя изменений раскрывающегося меню.
Сначала получите фильтр классов из выбранного раскрывающегося списка:
$('#menu-selector').change(function() {
var selectedClass = $('#menu-selector option:selected').attr('value');
Затем мы собираемся выберите все элементы сетки, соответствующие этому типу, чтобы увидеть, какие у них есть другие классы. Этим другим классам будут доступные типы
var availableTypes = $(`.grid-item${selectedClass}`)
.toArray()
.flatMap(div => Array.from(div.classList.values())) //get all of the classes
.filter(i => !['grid-item', selectedClass.substring(1)].includes(i)); //eliminate useless ones
Last, переключите свойство disabled
в другом раскрывающемся списке, включив только те, которые доступны.
$('#type-selector option')
.each( (i,el) => $(el).prop('disabled', el.value != "" && !availableTypes.includes(el.value.substring(1))));
Это должно сделай это. Обработчик изменений для раскрывающегося списка типов такой же, но ссылается на противоположный раскрывающийся список. Проверьте кодовый ручка для деталей.