jQuery筛选匹配多属性的div 语言筛选功能失效求助
问题排查
- 逻辑分支覆盖不全:原有代码仅判断了岗位筛选值是否为
choose,完全没有兼容语言筛选的选中状态,当用户仅选择语言、或者同时选岗位和语言时,语言条件仅在岗位非choose时部分生效,岗位为choose时直接忽略语言筛选 - 无效逻辑冗余:岗位为
choose时的判断条件$(this).attr('data-vposition') != 'kies'无实际业务意义,且没有加入语言匹配规则,导致只要没选岗位,所有岗位都会直接显示,完全不触发语言筛选 - 测试数据不匹配:示例HTML中第一个岗位的
data-vlanguage属性值为Nederlands,但岗位标题写的是德语、下拉选项里也没有荷兰语选项,会导致匹配异常
修复方案
重构筛选逻辑,不需要拆分复杂分支,统一判断每个岗位是否满足所有已选的筛选规则即可:如果某筛选项选的是choose,则代表该条件不做限制,所有岗位都满足该条件,最终只有同时满足所有选中规则的岗位才会显示。
修复后的JS代码如下:
function ApplyFilter() { var Position = $('select.vacancy-position').val(); var Language = $('select.vacancy-language').val(); // 遍历所有岗位统一判断匹配规则 $('.vacancies').find('.vacancy').each(function() { const $vacancy = $(this); // 岗位匹配规则:未选岗位则自动满足,否则匹配属性值 const positionMatch = Position === 'choose' || $vacancy.attr('data-vposition') === Position; // 语言匹配规则:未选语言则自动满足,否则匹配属性值 const languageMatch = Language === 'choose' || $vacancy.attr('data-vlanguage') === Language; // 同时满足所有规则才显示,否则隐藏 positionMatch && languageMatch ? $vacancy.fadeIn('fast') : $vacancy.fadeOut('fast'); }); }
如果需要测试德语机修岗位的匹配效果,可将第一个岗位的data-vlanguage="Nederlands"修改为data-vlanguage="German"即可。
内容的提问来源于stack exchange,提问作者Maarten
相关产品推荐
相关产品推荐

