js实现table内 某列的内容进行即时筛选

往往有些时候,我们把数据从数据库读取出来,显示到table里面,而此时来了个新需求,要在一个搜索框内输入关键字,表格的内容进行即时的筛选。

而即时触发进行数据库的查询,再回调显示,就显得慢,拖累服务器,降低用户体验度,这时,要是有个纯js操作,进行表格某列的即时筛选,这样既能提高搜索速度,也不用占用服务器资源,用户自然也满意。

实现如下,先看效果图,

开始状态:


在输入框内输入‘w’,表格即时进行筛选,筛选表格内包含有‘w’的行,没有‘w’的进行隐藏,原理就是这样:



实现代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test js</title>
</head>
<script type="text/javascript">
function onSearch(obj){//js函数开始
	setTimeout(function(){//因为是即时查询,需要用setTimeout进行延迟,让值写入到input内,再读取
		var storeId = document.getElementById('store');//获取table的id标识
		var rowsLength = storeId.rows.length;//表格总共有多少行
		var key = obj.value;//获取输入框的值

		var searchCol = 0;//要搜索的哪一列,这里是第一列,从0开始数起

		for(var i=1;i<rowsLength;i++){//按表的行数进行循环,本例第一行是标题,所以i=1,从第二行开始筛选(从0数起)
			var searchText = storeId.rows[i].cells[searchCol].innerHTML;//取得table行,列的值

			if(searchText.match(key)){//用match函数进行筛选,如果input的值,即变量 key的值为空,返回的是ture,
				storeId.rows[i].style.display='';//显示行操作,
			}else{
				storeId.rows[i].style.display='none';//隐藏行操作
			}
		}
	},200);//200为延时时间
}
</script>
<body>
<div > <input name="key" type="text" id="key" οnkeydοwn="onSearch(this)" value="" /></div>
<table width="200" border="1" id="store"><!-- id与函数的getId一致 -->
  <tr bgcolor="#CCCCCC">
    <td>name</td>
    <td> </td>
    <td> </td>
  </tr>
    <td>good</td>
    <td> </td>
    <td> </td>
  </tr>
  <tr>
    <td>better</td>
    <td> </td>
    <td> </td>
  </tr>
  <tr>
    <td>best</td>
    <td> </td>
    <td> </td>
  </tr>
  <tr>
    <td>bad</td>
    <td> </td>
    <td> </td>
  </tr>
  <tr>
    <td>worse</td>
    <td> </td>
    <td> </td>
  </tr>
  <tr>
    <td>worst</td>
    <td> </td>
    <td> </td>
  </tr>
  
</table>


</body>
</html>


这个功能可以通过前端的JavaScript实现。具体步骤如下: 1. 在HTML中创建一个搜索框和一个数据表格。 2. 监听搜索框的输入事件,当用户输入内容时,触发一个函数。 3. 在函数中,获取搜索框中的关键字,并遍历数据表格中的每一行。 4. 对于每一行,获取其所有单元格的文本内容,并与搜索框中的关键字进行比较。 5. 如果某一行的所有单元格中都包含了关键字,那么就显示这一行,否则就隐藏它。 6. 最后,更新表格的显示状态,使得只有符合条件的行被显示出来。 下面是一个简单的示例代码,可以根据需要进行修改和扩展: HTML代码: ``` <input type="text" id="search-box" placeholder="请输入关键字"> <table id="data-table"> <thead> <tr> <th>名称</th> <th>价格</th> <th>库存</th> </tr> </thead> <tbody> <tr> <td>苹果</td> <td>5元/斤</td> <td>100斤</td> </tr> <tr> <td>香蕉</td> <td>3元/斤</td> <td>50斤</td> </tr> <tr> <td>橘子</td> <td>4元/斤</td> <td>80斤</td> </tr> </tbody> </table> ``` JavaScript代码: ``` // 获取搜索框和数据表格 var searchBox = document.getElementById('search-box'); var dataTable = document.getElementById('data-table'); // 监听搜索框的输入事件 searchBox.addEventListener('input', function() { // 获取关键字,并转换为小写字母 var keyword = searchBox.value.toLowerCase(); // 遍历数据表格中的每一行 for (var i = 1; i < dataTable.rows.length; i++) { var row = dataTable.rows[i]; var cells = row.cells; var match = false; // 对于每一行,遍历其所有单元格 for (var j = 0; j < cells.length; j++) { var cellText = cells[j].textContent.toLowerCase(); // 如果该单元格包含关键字,则标记为符合条件 if (cellText.indexOf(keyword) >= 0) { match = true; break; } } // 根据是否符合条件来显示或隐藏该行 if (match) { row.style.display = ''; } else { row.style.display = 'none'; } } }); ```
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值