求助:使用JQuery实现输入框+下拉框的表格行多条件筛选
多条件表格筛选功能修复
现有一套带输入框和下拉框的筛选控件,需要实现表格行的多条件筛选逻辑:当所有筛选条件都满足时,对应表格行背景设为黄色,否则恢复透明。原jQuery代码无法正常实现该功能,以下是问题分析和修复方案:
原代码存在的问题
match变量在each循环外初始化,导致不同行的筛选状态互相干扰- PriceNo筛选错误定位到a标签,实际应获取对应下拉框的选中项文本
yellow变量未定义,缺少具体颜色值- 部分
if语句缺少闭合括号,存在语法错误 $groupProcessingTable变量未提前获取表格元素,导致后续操作失效
修正后的jQuery代码
// 提前获取表格元素 var $groupProcessingTable = $('.table-order-items'); // 定义黄色背景色值 var yellow = 'rgb(255, 213, 128)'; // 绑定筛选控件的键盘输入和选择事件 $('[id^=filter-by]').on('keyup change', function () { // 获取各筛选控件的当前值并做格式化处理 var nameValue = $.trim($('#filter-by-name').val()).toLowerCase(); var supplierValue = $.trim($('#filter-by-supplier').val()).toLowerCase(); var fromdateValue = parseInt($('#filter-by-fromdate').val()); var todateValue = parseInt($('#filter-by-todate').val()); var pricenoValue = $('#filter-by-priceno').find(":selected").text().toLowerCase(); // 遍历表格每一行进行条件匹配 $groupProcessingTable.find('tbody tr').each(function () { // 每行初始化匹配状态为true var match = true; // 名称筛选条件判断 if (nameValue !== "") { if (!($(this).find('td:first a').text().toLowerCase().includes(nameValue))) { match = false; } } // 供应商筛选条件判断 if (supplierValue !== "") { if (!($(this).find('td:eq(1) option:selected').text().toLowerCase().includes(supplierValue))) { match = false; } } // 起始日期筛选条件判断 if (!isNaN(fromdateValue)) { var rowFromDate = parseInt($(this).find('td:eq(2) input[name^=product-delivery-from]').val()); if (!(rowFromDate >= fromdateValue)) { match = false; } } // 结束日期筛选条件判断 if (!isNaN(todateValue)) { var rowToDate = parseInt($(this).find('td:eq(3) input[name^=product-delivery-to]').val()); if (!(rowToDate <= todateValue)) { match = false; } } // PriceNo筛选条件判断 if (pricenoValue !== "") { if (!($(this).find('td:eq(4) option:selected').text().toLowerCase().includes(pricenoValue))) { match = false; } } // 根据匹配结果设置行背景色 $(this).css("background-color", match ? yellow : ''); }); });
内容的提问来源于stack exchange,提问作者orangecoder
相关产品推荐
相关产品推荐

