Layui-select 下拉框实现拼音全拼匹配/首字母模糊搜索

news/2024/11/24 13:53:05/

Layui

layui(谐音:类UI) 是一款采用自身模块规范编写的前端 UI 框架。亲测很好用,很好看。
官网:http://www.layui.com/
github:https://github.com/sentsin/layui

插播一条相关博客:Layui-select 修复搜索之后上下键的bug


研究select搜索功能的实现

layui的select组件自带搜索功能,只要在select标签里面添加属性search=""即可。
但是如果选项非常多,很多人会想,如果能够用拼音快速地搜索匹配就更好了,我只要输入拼音前面几个字母,就能够快速匹配到我想要的选项。但是这个功能Layui的select没有帮我们实现。
没关系,我们来读读它的源代码,很快就能找到搜索功能是怎么实现的,我们在这里自己加上我们的代码就可以实现啦。

此时注意:这里的源代码指的是原始代码。我们从官网下载下来的js文件都是经过压缩的,所以你如果直接打开form.js文件进行解读并修改你会晕倒到电脑前的。所以你可以前往github拷贝下form.js文件进行修改,github上的文件都是源文件哦。

首先毫无疑问,select组件的功能就是放在form.js里面啦。
我们可以看到select的搜索功能中,调用了一个叫notOption的函数来判断是否有匹配的选项。
这里写图片描述

我们找到这个函数之后,发现判断输入内容与各选项是否匹配的是这个语句:
这里写图片描述

那我们就可以从这个语句入手啦。


开始动手解决

之前在使用easyUI框架的时候,我也动手实现过它的select下拉框拼音搜索功能。因此,结合上一次的实现,这一次根据layui的select组件的dom实现特点做一些改动。(有机会写一个easyUI的实现方法,只是easyUI的解决方法还是挺多
的,可以根据自己的实际需求做改动)

一、引进插件
首先我们要先引进一个pinyin.js文件,它是一个将汉字转换为拼音的JavaScript插件,并且支持多音字,直接使用ConvertPinyin(text)获取。http://www.uedsc.com/pinyin-js.html 这个网址是这个插件的介绍。
还要引进一个initials.js文件,它是提取汉字首字母的,返回的是一个大写字母字符串组成的数组,当然这个数组只有一个元素。获取时应正确使用:makePy(text)[0]。
为了方便,以上两个已上传到我的码云和github,CSDN资源库也有,可前往下载:
码云:https://gitee.com/onionoo/pinyin.js
github:https://github.com/onionooO/ChineseToPinyinAndInitials
CSDN资源:全拼:https://download.csdn.net/download/sinat_39571186/10417956
首字母:https://download.csdn.net/download/sinat_39571186/10417947

二、修改代码
我们将输入值是否与选项匹配的not变量用一个函数myFilter来实现。在下图这个位置改动一下代码,同时添加一个获取选项value的变量id:
这里写图片描述

接下来就是myFilter函数的实现了。在notOption函数上面加一个函数myFilter:
这里写图片描述

重点是在画框框的这个判断语句,可以根据自己的需求来实现。
ConvertPinyin(text).substring(0, len) === value 这句语句是为了实现拼音从头到尾地匹配,这就要求你要全拼。匹配效果如下:
这里写图片描述
makePy(text)[0].toLowerCase().substring(0, len) === value 这句语句是实现首字母从头到尾匹配,匹配效果如下:
这里写图片描述

这样基本就能够实现拼音全拼和首字母匹配了。(因为可能涉及到公司一些东西,所以就打了码,能看懂就好。)


注意

顺便一提,我们可以发现,Layui的select组件和普通的select并不一样,它是用定义列表dl、dd来排列选项的。
这里写图片描述

这也是notOption函数中的dds的来历以及对dds进行遍历的原因,同时也是我选择在源代码里面做改动的原因。

我本来想要另外重写一下那个notOption函数,尽量不要去改动源代码的。然后我发现dds的获取好像挺有讲究的,在函数前面老远老远的地方,看图:
这里写图片描述
然后我就放弃重写了,除了我懒之外,还怕破坏一些东西,就直接在源代码里面修改了。

补充:layui-select搜索出来之后存在一个上下键搜索的bug,解决请看另一篇博客:Layui-select 修复搜索之后上下键的bug


最后

还是贴一下代码吧。建议还是读一下源代码,或看一下上面的内容,下次作者再次更新代码的时候,就知道在哪个地方做修改了。
注意,第一步引入两个文件,pinyin.js和initials.js。第二步,如果你引用的是layui.all.js文件,那么你就要改一下了,要改成引用layui.js文件哦。

//搜索过滤器
var myFilter = function(value, text, id) {var result;if (escape(value).indexOf("%u") != -1) { //汉字result = text.indexOf(value) > -1;} else {var len = value.lengthresult = ConvertPinyin(text).substring(0, len) === value || makePy(text)[0].toLowerCase().substring(0, len) === value || text.toLowerCase().indexOf(value) > -1 || (id === undefined ? false : id.indexOf(value) > -1);}if (result == true) {return false;} else {return true;}
};//检测值是否不属于 select 项
var notOption = function(value, callback, origin) {var num = 0;layui.each(dds, function() {var othis = $(this),text = othis.text(),id = othis.attr("layui-value")// ,not = text.indexOf(value) === -1,not = myFilter(value, text, id);//value为input框输入的值,//text是当前dd的值,即当前被遍历到的选项,//id为当前dd的layui-value属性if (value === '' || (origin === 'blur') ? value !== text : not) num++;origin === 'keyup' && othis[not ? 'addClass' : 'removeClass'](HIDE);});var none = num === dds.length;return callback(none), none;
};

最最后

需转载请联系作者。


http://www.ppmy.cn/news/661366.html

相关文章

elementUI Cascader 级联选择器 拼音模糊搜索

项目场景: 我领导说他大BOSS想要可以拼音搜索,然后我就去百度百度百度… 只是elementUI级联选择器的拼音模糊搜索,可以作为普通输入框模糊搜索的借鉴… 实现步骤: 1、下载依赖: 可以在VScode打开项目的终端里执行这…

mysql实现根据同音字、首字母、拼音进行模糊搜索(复刻钉钉模糊搜索)

公司新上了一款低代码平台的项目,在使用过程中用户反馈搜索功能体感不好,不如钉钉的搜索灵活则尝试复刻了一下钉钉的灵活搜索,实现方式可能不同但最终展现的效果是一致的,特此记录 待优化:mysql自定义函数影响查询速度,添加索引也很慢 部分生僻字不支持汉字转拼音 思路: 创建自…

element拼音模糊搜索

1.安装依赖&#xff08;npm有问题就用cnpm&#xff09; npm install pinyin-match --save cnpm install pinyin-match --save2.引用 import pinyin from pinyin-match3.关键代码 pinyin.match(data, value); //data匹配的内容&#xff0c;value输入的内容4.示例 <templ…

中文拼音模糊查询的一种解决方法

目前在ASP.Net平台下中文拼音模糊查询的方法有好几种。不外乎都是把拼音的码放到数据库里。 今天发现另一种解决的办法。网上有人把拼音码做成SQL Server的PLUGIN&#xff0c;通过存储过程来调用。 支持GBK,BIG5,也支持词组查询。 访问这个网址&#xff1a;http://www.cppfa…

拼音匹配模糊搜索

pinyin-engine 这是一款简单高效的拼音匹配引擎&#xff0c;它能使用拼音够快速的检索列表中的数据。 使用索引以及缓存机制&#xff0c;从而在客户端实现毫秒级的数据检索它的字典数据格式经过压缩处理&#xff0c;简体中文版本仅仅 17kb 大小&#xff08;Gzip&#xff09;支…

前端模糊搜索,拼音模糊搜索,js拼音模糊搜索

zpinyin轻量级高性能的前端拼音模糊检索js插件 前言 zpinyin轻量级前端拼音模糊检索插件 使用原数据与索引数据区分模式&#xff0c;原数据大小不会对检索查询速度造成影响。 检索索引一次建立后续直接使用&#xff0c;大幅优化检索效率。 概述 该插件收录常用汉字6763个 支…

前端js实现模糊搜索和拼音搜索

前端在列表搜索功能中&#xff0c;经常遇到有很多属性的列表&#xff0c;属性的内容可能还有汉字&#xff0c;精准匹配太局限了&#xff0c;搜索条件需要很精准。 通过正则表达式进行模糊匹配 //input为输入的搜索内容 //生成input正则表达式进行模糊匹配 let inputArr inpu…

通过拼音模糊搜索汉字的功能实现

一、原由 前一段时间用php实现通讯录系统&#xff0c;需要用到拼音查找汉字功能&#xff0c;匹配通讯录的姓名字段&#xff0c;于是在网上搜索已有的开源代码&#xff0c;下面总结和分析一下思路和具体实现。 二、思路 查找了网上的多种解决方案&#xff0c;大致分为几类&am…