JS实现表格数据各种搜索功能的方法

JavaScript025

JS实现表格数据各种搜索功能的方法,第1张

本文实例讲述了JS实现表格数据各种搜索功能。可忽略大小写,模糊搜索,多关键搜索。分享给大家供大家参考。具体实现方法如下:

复制代码

代码如下:<!DOCTYPE

html>

<html>

<head>

<meta

charset="utf-8">

<title></title>

<script

type="text/javascript">

window.onload=function(){

var

oTab=document.getElementById("tab")

var

oBt=document.getElementsByTagName("input")

oBt[1].onclick=function(){

for(var

i=0i<oTab.tBodies[0].rows.lengthi++)

{

var

str1=oTab.tBodies[0].rows[i].cells[1].innerHTML.toUpperCase()

var

str2=oBt[0].value.toUpperCase()

//使用string.toUpperCase()(将字符串中的字符全部转换成大写)或string.toLowerCase()(将字符串中的字符全部转换成小写)

//所谓忽略大小写的搜索就是将用户输入的字符串全部转换大写或小写,然后把信息表中的字符串的全部转换成大写或小写,最后再去比较两者转换后的字符就行了

/*******************************JS实现表格忽略大小写搜索*********************************/

if(str1==str2){

oTab.tBodies[0].rows[i].style.background='red'

}

else{

oTab.tBodies[0].rows[i].style.background=''

}

/***********************************JS实现表格的模糊搜索*************************************/

//表格的模糊搜索的就是通过JS中的一个search()方法,使用格式,string1.search(string2)如果

//用户输入的字符串是其一个子串,就会返回该子串在主串的位置,不匹配则会返回-1,故操作如下

if(str1.search(str2)!=-1){oTab.tBodies[0].rows[i].style.background='red'}

else{oTab.tBodies[0].rows[i].style.background=''}

/***********************************JS实现表格的多关键字搜索********************************/

//表格的多关键字搜索,加入用户所输入的多个关键字之间用空格隔开,就用split方法把一个长字符串以空格为标准,分成一个字符串数组,

//然后以一个循环将切成的数组的子字符串与信息表中的字符串比较

var

arr=str2.split('

')

for(var

j=0j<arr.lengthj++)

{

if(str1.search(arr[j])!=-1){oTab.tBodies[0].rows[i].style.background='red'}

}

}

}

}

</script>

</head>

<body>

姓名:<input

type="text"

/>

<input

type="button"

value="搜索"/>

<table

border="1"

bordercolor="blue"

id="tab">

<thead>

<td><h2>ID</h2></td>

<td><h2>Name</h2></td>

<td><h2>Age</h2></td>

</thead>

<tbody>

<tr>

<td>1</td>

<td>Blue</td>

<td>15</td>

</tr>

<tr>

<td>2</td>

<td>Mikyou</td>

<td>26</td>

</tr>

<tr>

<td>3</td>

<td>weak</td>

<td>24</td>

</tr>

<tr>

<td>4</td>

<td>sky</td>

<td>35</td>

</tr>

<tr>

<td>5</td>

<td>李四</td>

<td>18</td>

</tr>

</tbody>

</table>

</body>

</html>

希望本文所述对大家的javascript程序设计有所帮助。

最近工作中接到了一个需求:一个项目列表,项目名称可能有中文可能有英文,如果是中文的话,需要实现用户输入项目的拼音即可筛选到对应项目的功能。

完成了之后觉得可以在公众号里给大家分享一下,给有需要的人一个参考吧。

项目框架用的是react,所以先creat-react-app

比如create-react-app pinyin

渲染选择框的组件用的是antd的Select组件,所以需要先引入antd,具体引入的方法参照antd官方文档,已经写得很清楚了

以上准备工作做好后,目前的目录结构应该如下图所示:

├── README.md

├── package.json

├── package-lock.json

├── config-overrides.js

├── public

│    ├── favicon.ico

│    ├──index.html

      └── manifest.json

├── src

│   ├── App.css

│   ├── App.js

│   ├── App.test.js

│   ├── index.css

│   ├── index.js

│   ├──logo.svg

│   └── registerServiceWorker.js

现在在src文件夹下新建一个components文件夹,components文件夹中新建一个SelectPinYin文件夹,SelectPinYin文件夹下新建一个index.js和PinYin.js

PinYin.js文件中主要放置拼音和各个拼音对应的中文字符串,方便组件调用

export const SimplePinYin = {

py: [

        [ 'a','阿啊呵腌吖锕啊呵嗄啊呵啊呵阿啊呵' ],

        [ 'ai','哀挨埃唉哎捱锿呆挨癌皑捱矮哎蔼霭嗳爱碍艾唉哎隘暧嗳瑷嗌嫒砹' ],

        [ 'an','安谙鞍氨庵桉鹌厂俺铵揞埯案按暗岸黯胺犴' ],

        [ 'ang','肮昂盎' ],

        [ 'ao','熬凹熬敖嚣嗷鏖鳌翱獒聱螯廒遨袄拗媪奥澳傲懊坳拗骜岙鏊' ],

        [ 'ba','八吧巴叭芭扒疤笆粑岜捌八拔跋茇菝魃把靶钯把爸罢霸坝耙灞鲅吧罢' ],

        [ 'bai','掰白百摆伯柏佰捭败拜呗稗' ],

        [ 'ban','般班搬斑颁扳瘢癍版板阪坂钣舨办半伴扮瓣拌绊' ],

        [ 'bang','帮邦浜梆膀榜绑棒膀傍磅谤镑蚌蒡' ],

[ 'bao','包胞炮剥褒苞孢煲龅薄雹保宝饱堡葆褓鸨报暴抱爆鲍曝刨瀑豹趵' ],

        [ 'bei','背悲杯碑卑陂埤萆鹎北被备背辈倍贝蓓惫悖狈焙邶钡孛碚褙鐾鞴臂呗' ],

...

]

}

内容太多,只能复制这样一小部分,其余部分可以参考下面这条链接,然后改成上面那种格式就可以了。

http://www.cnblogs.com/meteoric_cry/p/5954547.html

接下来开始写组件

要做到拼音搜索匹配到中文,所以调用this.selectPinYin函数,下面开始写selectPinYin函数

当input为中文时:

return option.props.children.toLowerCase().indexOf( input.toLowerCase() ) >= 0

当input为字母时:

const value = option.props.children.toLowerCase().split( '' )

const newValue = value.map( item =>this.chineseChangePY( item ) ).join( '' )

return newValue.indexOf( input.toLowerCase() ) >= 0

思路:

①    将列表中的每项内容,即option.props.children转成小写(万一不全是中文),然后进行分割,split('')把字符串转成数组

②    遍历得到的数组,并把每一个元素传递给chineseChangePY函数

③    chineseChangePY函数的作用:如果元素不是中文,直接返回;如果是中文,遍历PinYin.js中的数组,与每个子数组的第二个元素即中文字符串对比,如果元素在这个中文字符串里,返回中文字符串所在数组的第一个元素,即所需要的拼音

④    将处理过的数组转成字符串

⑤    和input进行对比,存在返回true,不存在返回false

bug说明: 比如遇到生僻字的时候,PinYin.js中没有收录进这个中文,就无法匹配。比如遇到多音字的时候,“藏”:既可以cang也可以zang,cang排在zang前面,当遍历匹配的时候遇到cang就已经返回了,所以如果有用户输入zang就匹配不到藏字。

如果有更好的方法,欢迎讨论交流。

这里有一个简单的站内搜索功能

<SCRIPT language=javascript>

<!--

function go(formname)

{

var url = http://www.163ns.com

formname.method = "get"

if (formname.myselectvalue.value == "1") {

document.search_form1.word.value = document.search_form1.word.value " site:www.163ns.com"

}

formname.action = url

return true

}

//-->

</SCRIPT>

<form name="search_form1" target="_blank" onsubmit="return go(this)">

<input name=word size="30" value="请输入关键字" onMouseOver="this.focus()" onBlur="if (value ==''){value='请输入关键字'}" onFocus="this.select()" onClick="if(this.value=='请输入关键字')this.value=''">

<input type="submit" value="搜索"><br>

<INPUT name=myselectvalue type=hidden value=0>

<INPUT name=tn type=hidden value="sayyes">

<INPUT name=cl type=hidden value="3">

<INPUT CHECKED name=myselect onclick=javascript:this.form.myselectvalue.value=0 type=radio value=0>

<FONT color=#0000cc style="FONT-SIZE: 12px">互联网 

<INPUT name=myselect onclick=javascript:this.form.myselectvalue.value=1 type=radio value=1>

<FONT color=#ff0000 style="FONT-SIZE: 12px">站内 

</form>