两个jQuery筛选器组合问题求助:双参函数调用后第二个筛选器失效
解决两个Select筛选器组合失效的问题
问题根源
第二个筛选器失效的核心原因是筛选逻辑未同时结合两个条件,且大概率每次筛选都基于上一次过滤后的结果而非原始元素集合,导致第二个筛选条件无法作用于全部目标元素。
修复方案
1. 保存原始元素集合
页面加载完成后先缓存所有需要筛选的元素,避免每次筛选都基于已过滤的结果:
// 缓存原始待筛选元素集合 var $originalItems = $('.item');
2. 修改筛选函数,同时应用双条件
更新filterResults函数,让它依次叠加两个筛选条件,确保最终结果同时满足两个Select的选择:
function filterResults(curr_text, curr_text2) { // 先隐藏所有元素 $originalItems.hide(); // 初始化筛选集合为原始元素 var $filteredItems = $originalItems; // 应用第一个筛选条件(有值时生效) if (curr_text) { $filteredItems = $filteredItems.filter(':CIcontains("' + curr_text + '")'); } // 应用第二个筛选条件(有值时生效) if (curr_text2) { $filteredItems = $filteredItems.filter(':CIcontains("' + curr_text2 + '")'); } // 显示符合所有条件的元素 $filteredItems.show(); }
3. 绑定Select的变更事件
确保两个Select触发变更时,都能传递各自的最新值给筛选函数:
// 第一个Select的变更事件 $('#select1').on('change', function() { filterResults($(this).val(), $('#select2').val()); }); // 第二个Select的变更事件 $('#select2').on('change', function() { filterResults($('#select1').val(), $(this).val()); });
关于自定义伪选择器
你编写的CIcontains伪选择器功能正常,实现了不区分大小写的文本匹配,无需修改:
jQuery.expr[":"].CIcontains = jQuery.expr.createPseudo(function(arg) { return function(elem) { return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; }; });
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

