如何使用 jQuery 为表格制作下拉列表过滤器?

Posted

技术标签:

【中文标题】如何使用 jQuery 为表格制作下拉列表过滤器?【英文标题】:How to make dropdown list filter for a table using jQuery? 【发布时间】:2016-06-16 17:00:16 【问题描述】:

我想在特殊列中制作下拉表过滤器,例如我想为“已婚”列制作过滤器并从下拉列表中选择是或否,这是我的表:

我需要一个 jquery 代码来帮助我制作过滤器。

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<table id="table_format" class="table table-bordered table-striped table-hover table-list-search">
  <thead>
    <tr>
      <th>#</th>
      <th>First Name</th>
      <th>Last Name</th>
      <th>Maried</th>
    </tr>
  </thead>
  <tbody id="myTable">
    <tr>
      <td>1</td>
      <td>Mark</td>
      <td>Otto</td>
      <td>yes</td>
    </tr>

    <tr>
      <td>3</td>
      <td>Larry</td>
      <td>the Bird</td>
      <td>no</td>
    </tr>
    <tr>
      <td>1</td>
      <td>Mark</td>
      <td>Otto</td>
      <td>yes</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Jacob</td>
      <td>Thornton</td>
      <td>no</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Larry</td>
      <td>the Bird</td>
      <td>no</td>
    </tr>
  </tbody>
</table>

<!-- jQuery (necessary for Bootstrap's javascript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="js/filter.js"></script>

【问题讨论】:

【参考方案1】:

试试这个 - 使用正则表达式和 jQuery 过滤器函数根据选择列表 onchange 过滤结果(使用添加到 tr 的类来控制显示)。这也可以在文本输入版本中用于实时过滤任何内容的任何表格行,以便您可以输入人名等并获取过滤功能以仅显示匹配的名称。

我还添加了一个“全部”选项以再次显示所有 tr(有效地删除了过滤器)。请注意,它只是隐藏了不匹配的行,这意味着表格的条纹方面不一定会按需要显示,但是当我实现这样的东西时 - 我还添加了一个函数,根据数量重新条纹表应用过滤器后的行和奇数/偶数等 - 从而重新划分表格显示。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Filter</title>
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
	<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
</head>
<body>
     <table id="table_format" class="table table-bordered table-striped table-hover table-list-search">
                    <thead>
                        <tr>
                            <th>#</th>
                            <th>First Name</th>
                            <th>Last Name</th>
                            <th>Married
							<select id='filterText' style='display:inline-block' onchange='filterText()'>
								<option disabled selected>Select</option>
								<option value='yes'>Yes</option>
								<option value='no'>No</option>
								<option value='all'>All</option>
							</select>
							</th>
                        </tr>
                    </thead>
                    <tbody  id="myTable">
                        <tr class="content">
                            <td>1</td>
                            <td>Mark</td>
                            <td>Otto</td>
                            <td>yes</td>
                        </tr>
                        
                        <tr class="content">
                            <td>3</td>
                            <td>Larry</td>
                            <td>the Bird</td>
                            <td>no</td>
                        </tr>
                        <tr class="content">
                            <td>1</td>
                            <td>Mark</td>
                            <td>Otto</td>
                            <td>yes</td>
                        </tr>
                        <tr class="content">
                            <td>2</td>
                            <td>Jacob</td>
                            <td>Thornton</td>
                            <td>no</td>
                        </tr>
                        <tr class="content">
                            <td>3</td>
                            <td>Larry</td>
                            <td>the Bird</td>
                            <td>no</td>
                        </tr>
                    </tbody>
                </table>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>

<script>
function filterText()
	  
		var rex = new RegExp($('#filterText').val());
		if(rex =="/all/")clearFilter()else
			$('.content').hide();
			$('.content').filter(function() 
			return rex.test($(this).text());
			).show();
	
	
	
function clearFilter()
	
		$('.filterText').val('');
		$('.content').show();
	
</script>
</body>
</html>

【讨论】:

您使用 filtertext 作为 clearFilter() 的类 如果单元格为空我想选择怎么办? 你为什么使用正则表达式?好奇怪【参考方案2】:

您可能还喜欢这个 jQuery 解决方案:https://www.jqueryscript.net/table/Simple-jQuery-Dropdown-Table-Filter-Plugin-ddtf-js.html

jQuery('#mytableid').ddTableFilter();

这是一个旧脚本,但仍然适用于 jquery 版本 3.6.0

【讨论】:

以上是关于如何使用 jQuery 为表格制作下拉列表过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ASPX、AJAX 控件或 JQuery 的下拉列表过滤器?

动态填充下拉菜单以过滤 Jquery Datatable

JQuery MiNiUI 多选多列下拉列表如何动态赋值。

Kendo UI 下拉过滤器不适用于 jquery

如何使用 jQuery php 验证 Bootstrap + 选择的插件

使用jQuery数据表中的列过滤器下拉列表修复标头