You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 05:48:19