往往有些時候,我們把數據從數據庫讀取出來,顯示到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>