Razor Pages项目下拉框按端口过滤tr功能失效如何解决?
问题排查
你的端口过滤逻辑存在以下几处核心错误:
- jQuery选择器语法不符合规范,
:not()伪类内的写法完全错误,无法正确筛选出id等于选中值的tr元素 - 只有隐藏逻辑没有重置显示的逻辑,每次切换下拉选项时,之前被隐藏的行不会重新显示,后续过滤会直接失效
- 两个过滤逻辑互相独立没有关联,修改其中一个条件会直接覆盖另一个的过滤结果
- 如果端口值为纯数字开头,直接用
#id选择器存在兼容性问题,用属性选择器更稳妥
修复方案
建议把两个过滤逻辑合并,统一触发避免冲突,优化后的完整代码如下:
$(document).ready(function () { // 统一过滤函数,同时处理两个过滤条件 function filterTable() { const selectedPort = $('#portdd').val(); const searchStr = $('#searchb').val().trim(); // 先重置所有数据行的显示状态 $('tr:gt(0)').show(); // 应用端口过滤 if (selectedPort) { $('tr:gt(0):not([id="' + selectedPort + '"])').hide(); } // 在端口过滤结果的基础上应用名称过滤 if (searchStr) { $('tr:gt(0):visible:not(:contains("' + searchStr + '"))').hide(); } } // 绑定事件,搜索框支持实时输入响应,不用等待失焦 $('#portdd').change(filterTable); $('#searchb').on('input change', filterTable); });
额外注意事项
- 如果你的tr元素id带有前缀(比如
port_8080),需要把选择器对应改成[id="port_' + selectedPort + '"] - jQuery自带的
:contains是大小写敏感的,如需大小写不敏感的搜索,可以自定义filter方法实现 - 建议给目标表格加上单独的id(比如
id="dataTable"),把选择器改成#dataTable tr:gt(0),避免页面存在其他表格时出现误操作
内容的提问来源于stack exchange,提问作者Aaron Parrilla
相关产品推荐
相关产品推荐

