如何通过下拉选择器动态过滤表格行(仅显示指定字段值为1的行)

风宇同学_3886

风宇同学_3886

2026-09-30

255人浏览

原创

如何通过下拉选择器动态过滤表格行(仅显示指定字段值为1的行)

本文介绍使用纯 JavaScript 实现基于 下拉菜单的表格行级过滤功能:当用户选择某字段(如 value1),自动隐藏所有该字段值为 0 的整行,仅保留值为 1 的行,支持“无筛选”重置。

本文介绍使用纯 javascript 实现基于 `

在实际业务中(例如权限管理、多选项用户配置展示),后端常以 0/1 整型字段标识布尔状态,并渲染为 HTML 表格。若需前端快速筛选——如点击“value3”时只显示 value3=1 的行——无需刷新页面或请求后端,可借助轻量级 JavaScript 完成。

核心思路是:监听 <select></select> 的 change 事件 → 定位目标列对应的隐藏输入框(<input type="hidden" name="valueX">)→ 找到 value="0" 的元素 → 向上遍历至其所在 <tr> 行 → 设置 <code>display: none。注意:必须操作整行(<tr>),而非单个 <code><td>,否则会破坏表格结构(如题中截图所示问题)。<p>以下是完整、可直接运行的实现方案:</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill5980" title="javascript-pro"><img src="https://img.php.cn/upload/skill/000/000/081/179074807567238.jpg" alt="javascript-pro" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill5980" title="javascript-pro" class="overflowclass">javascript-pro</a> <p class="overflowclass">专注现代 ECMAScript、异步编程、性能优化和全栈的 JavaScript 专家,适用于现代开发</p> </div> <a rel="nofollow" href="/xiazai/skill5980" title="javascript-pro" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div> <h3>✅ HTML 结构(精简规范版)</h3> <pre class="brush:php;toolbar:false;">&lt;select name=&quot;filter&quot;&gt;&lt;option value=&quot;none&quot;&gt;No filter&lt;/option&gt; &lt;option value=&quot;value1&quot;&gt;value1&lt;/option&gt; &lt;option value=&quot;value2&quot;&gt;value2&lt;/option&gt; &lt;option value=&quot;value3&quot;&gt;value3&lt;/option&gt; &lt;option value=&quot;value4&quot;&gt;value4&lt;/option&gt; &lt;option value=&quot;value5&quot;&gt;value5&lt;/option&gt;&lt;/select&gt;</pre> <table id="data-table"> <tr> <td> <input type="hidden" name="value1" value="1">1</td> <td> <input type="hidden" name="value2" value="0">0</td> <td> <input type="hidden" name="value3" value="1">1</td> <td> <input type="hidden" name="value4" value="1">1</td> <td> <input type="hidden" name="value5" value="0">0</td> </tr> <tr> <td> <input type="hidden" name="value1" value="0">0</td> <td> <input type="hidden" name="value2" value="1">1</td> <td> <input type="hidden" name="value3" value="0">0</td> <td> <input type="hidden" name="value4" value="1">1</td> <td> <input type="hidden" name="value5" value="1">1</td> </tr> <!-- 更多数据行... --> </table> <blockquote> <p>⚠️ 注意事项:</p> <ul> <li>移除 <code><option></option> 上冗余的 onclick 属性(已由统一 change 事件接管);

  • 确保 <input> 标签正确闭合(原问题中 <td> 存在语法错误);<li>为表格添加 <code>id="data-table" 便于精准控制,避免影响页面其他表格。
  • ✅ JavaScript 过滤逻辑(健壮版)

    document.addEventListener('DOMContentLoaded', () => {
      const select = document.querySelector('select[name="filter"]');
      const table = document.getElementById('data-table');
      const rows = table.querySelectorAll('tbody tr, tr:not([id])'); // 兼容无 tbody 场景
    
      select.addEventListener('change', function() {
        const selectedValue = this.value;
    
        // 重置:显示所有行
        rows.forEach(row => row.style.display = '');
    
        // 若选择非 "none",执行过滤
        if (selectedValue !== 'none') {
          rows.forEach(row => {
            const targetInput = row.querySelector(`input[type="hidden"][name="${selectedValue}"]`);
            if (targetInput && targetInput.value === '0') {
              row.style.display = 'none';
            }
          });
        }
      });
    });

    ✅ 可选增强:CSS 样式建议

    #data-table { border-collapse: collapse; width: 100%; margin-top: 1rem; }
    #data-table td { padding: 0.5rem 0.75rem; border: 1px solid #ddd; }
    select { padding: 0.5rem 1rem; font-size: 1rem; }

    ✅ 总结

    该方案不依赖任何外部库,兼容所有现代浏览器;通过操作 <tr> 元素的 <code>display 样式实现行级显隐,语义清晰、性能高效。若后续需支持多条件筛选或服务端联动,可在本基础之上扩展为动态 AJAX 请求。关键原则始终不变:过滤目标是行(<tr>),而非单元格(<code><td>) —— 这是避免布局错乱的根本保障。</td>

    相关文章

    PHP速学视频免费教程(入门到精通)
    PHP速学视频免费教程(入门到精通)

    PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    php文件怎么打开
    php文件怎么打开

    打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

    2023.09.01

    9584

    6

    php怎么取出数组的前几个元素
    php怎么取出数组的前几个元素

    取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

    2023.10.11

    5761

    5

    php反序列化失败怎么办
    php反序列化失败怎么办

    php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

    2023.10.11

    2055

    5

    php怎么连接mssql数据库
    php怎么连接mssql数据库

    连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

    2023.10.23

    3608

    4

    php连接mssql数据库的方法
    php连接mssql数据库的方法

    php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

    2023.10.23

    4294

    6

    html怎么上传
    html怎么上传

    html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

    2023.11.03

    3351

    9

    PHP出现乱码怎么解决
    PHP出现乱码怎么解决

    PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    2023.11.09

    4777

    8

    php文件怎么在手机上打开
    php文件怎么在手机上打开

    php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    2023.11.13

    3742

    8

    sprintf函数用法详解
    sprintf函数用法详解

    sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

    2023.11.27

    11762

    4

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    WebStorm 官方调试文档
    WebStorm 官方调试文档

    共0课时 | 0人学习

    React 教程
    React 教程

    共58课时 | 12万人学习

    TypeScript 教程
    TypeScript 教程

    共19课时 | 6.6万人学习