工作代码笔 https://codepen.io/codebling/pen/NWqyqKq
首先,为每个下拉列表添加一个ID,以便我们区分它们。
<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
最后,切换disabled
属性在另一个下拉列表中,仅启用那些可用的。
$('#type-selector option')
.each( (i,el) => $(el).prop('disabled', el.value != "" && !availableTypes.includes(el.value.substring(1))));
应该可以做到这一点。类型下拉列表的更改处理程序是相同的,但引用相反的下拉列表。查看代码笔 https://codepen.io/codebling/pen/NWqyqKq了解详情。