基于jQuery实现搜索关键字自动匹配功能


Posted in Javascript onMarch 26, 2020

今天我们就一起来看一个简单的基于jquery的关键字自动匹配的例子,希望文章能够对各位有帮助。

例子一

在项目中,有时候需要用户选择城市,但是城市太多,用户选择起来不太方便,所以提供了一个用户可以通过输入框输入城市的汉字或者拼音简写。结果示意图如下:

基于jQuery实现搜索关键字自动匹配功能

当输入拼音后结果示意图如下:

基于jQuery实现搜索关键字自动匹配功能

实现代码如下:

<html><head><title>实时查询城市通过姓名或拼音简写</title></head><meta charset = "utf-8" ><script type="text/javascript" src="jquery.min.js"></script><body><input id="searchCityName" style="width: 100%;" type="text" placeholder="中文 / 拼音首字母" /> 
 <ul> 
 <li pinyin="bj" cityname="北京"><a href="/cityBranch/12.html">北京 </a></li> 
 <li pinyin="dl" cityname="大连"><a href="/cityBranch/14.html">大连 </a></li> 
 <li pinyin="sh" cityname="上海"><a href="/cityBranch/13.html">上海 </a></li> 
 <li pinyin="jn" cityname="济南"><a href="/cityBranch/15.html">济南 </a></li> 
 <li pinyin="gz" cityname="广州"><a href="/cityBranch/17.html">广州 </a></li> 
 <li pinyin="jh" cityname="金华"><a href="/cityBranch/18.html">金华 </a></li> 
 <li pinyin="wh" cityname="武汉"><a href="/cityBranch/19.html">武汉 </a></li> 
 <li pinyin="nj" cityname="南京"><a href="/cityBranch/20.html">南京 </a></li> 
 <li pinyin="sz" cityname="深圳"><a href="/cityBranch/22.html">深圳 </a></li> 
 <li pinyin="tj" cityname="天津"><a href="/cityBranch/21.html">天津 </a></li> 
 <li pinyin="cd" cityname="成都"><a href="/cityBranch/24.html">成都 </a></li> 
 <li pinyin="ly" cityname="临沂"><a href="/cityBranch/25.html">临沂 </a></li> 
 <li pinyin="cc" cityname="长春"><a href="/cityBranch/26.html">长春 </a></li> 
 <li pinyin="hz" cityname="杭州"><a href="/cityBranch/27.html">杭州 </a></li> 
 <li pinyin="nb" cityname="宁波"><a href="/cityBranch/28.html">宁波 </a></li> 
 <li pinyin="qd" cityname="青岛"><a href="/cityBranch/29.html">青岛 </a></li> 
 <li pinyin="sy" cityname="沈阳"><a href="/cityBranch/33.html">沈阳 </a></li> 
 </ul>
 <script>
 function searchCity() {
 var searchCityName = $("#searchCityName").val(); if (searchCityName == "") {
 $("ul li").show();
 } else {
 $("ul li").each(  function() {
  var pinyin = $(this).attr("pinyin");  var cityName = $(this).attr("cityName");  if (pinyin.indexOf(searchCityName) != -1
  || cityName.indexOf(searchCityName) != -1) {
  $(this).show();
  } else {
  $(this).hide();
  }
  });
 }
 }
 $('#searchCityName').bind('input propertychange', function() {
 searchCity();
 }); </script></body></html>

注意点:

1、当我想实现在输入框内实时查询列表值,想到的第一种方案是用ajax,但是想了一下发现列表的值基本是固定的,为什么不一次加载出来呢,所以把后台代码改了一下,将所有城市详情加载出来。
2、输入框内值改变需要触发事件,我第一个想法是用onchange,但是事实上onchange是输入框值改变且输入框失去焦点,所以我最终用了keyup。keyup在电脑上测试都没有问题,但是在微信端,怎么都不生效。于是将keyup替换成了最终的 bind(‘input propertychange', function() {} 。
3、在判断城市字符是否包含输入框内的字符时,我用contains函数,在火狐下测试没有任何问题,但是在chrome和微信客户端不生效。最后将contains替换成了indexOf。

例子二、使用jquery.autocomplete插件来实现。

1、使用设置

首页,要把插件的js代码嵌入到你自己的项目中去。

<script src="jquery.js" type="text/javascript"><!--mce:0--></script><script src="jquery.autocomplete.js" type="text/javascript"><!--mce:1--></script>

2、使用方法

为要实现自动匹配提示的 input 表单添加 AutoComplete 功能。

<input id="query" name="q" />
初始化 AutoComplete 对象,确保正确加载 DOM 对象,否则IE下的用户可能会出现错误。
$('#query').autocomplete({ serviceUrl: 'service/autocomplete.ashx', // Page for processing autocomplete requests minChars: 2, // Minimum request length for triggering autocomplete delimiter: /(,|;)\s*/, // Delimiter for separating requests (a character or regex) maxHeight: 400, // Maximum height of the suggestion list, in pixels width: 300, // List width zIndex: 9999, // List's z-index deferRequestBy: 0, // Request delay (milliseconds), if you prefer not to send lots of requests while the user is typing. I usually set the delay at 300 ms. params: { country: 'Yes'}, // Additional parameters onSelect: function(data, value){ }, // Callback function, triggered if one of the suggested options is selected, lookup: ['January', 'February', 'March'] // List of suggestions for local autocomplete });

根据文本表单中的输入信息,进行关键字提示匹配。

{ query:'Li', // Original request suggestions:['Liberia','Libyan Arab Jamahiriya','Liechtenstein','Lithuania'], // List of suggestions data:['LR','LY','LI','LT'] // Optional parameter: list of keys for suggestion options; used in callback functions. } 
jQuery AutoComplete 插件支持 on/off功能,从而控制效果的开关。
var ac = $('#query').autocomplete({ /*parameters*/ }); ac.disable(); ac.enable(); ac.setOptons({ zIndex: 1001 });

3、设置表现样式

最后,用div和css美化表现效果。

<div class="autocomplete-w1"><div id="Autocomplete_1240430421731" class="autocomplete" style="width: 299px;"><div><strong>Li</strong>beria</div><div><strong>Li</strong>byan Arab Jamahiriya</div><div><strong>Li</strong>echtenstein</div><div class="selected"><strong>Li</strong>thuania</div></div></div> .autocomplete-w1 { background:url(img/shadow.png) no-repeat bottom right; position:absolute; top:0px; left:0px; margin:6px 0 0 6px; /* IE6 fix: */ _background:none; _margin:1px 0 0 0; }.autocomplete { border:1px solid #999; background:#FFF; cursor:default; text-align:left; max-height:350px; overflow:auto; margin:-6px 6px 6px -6px; /* IE6 specific: */ _height:350px; _margin:0; _overflow-x:hidden; }.autocomplete .selected { background:#F0F0F0; }.autocomplete div { padding:2px 5px; white-space:nowrap; overflow:hidden; }.autocomplete strong { font-weight:normal; color:#3399FF; } jQuery AutoComplete

更多搜索功能实现的精彩文章,请点击专题:javascript搜索功能汇总 进行学习

以上分享的两个例子都是关于jQuery实现搜索关键字自动匹配功能的,希望对大家的学习有所帮助。

Javascript 相关文章推荐
ExtJS 设置级联菜单的默认值
Jun 13 Javascript
JavaScript编程开发中的五个实用小技巧
Jul 22 Javascript
了解一点js的Eval函数
Jul 26 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
Oct 17 Javascript
jQuery表单域属性过滤器用法分析
Feb 10 Javascript
JavaScript如何动态创建table表格
Aug 02 Javascript
Bootstrap基本插件学习笔记之按钮(21)
Dec 08 Javascript
angularjs实现的前端分页控件示例
Feb 10 Javascript
javascript 中Cookie读、写与删除操作
Mar 29 Javascript
vue打包的时候自动将px转成rem的操作方法
Jun 20 Javascript
layui自己添加图片按钮并点击跳转页面的例子
Sep 14 Javascript
微信小程序音乐播放器开发
Nov 20 Javascript
以Python代码实例展示kNN算法的实际运用
Oct 26 #Javascript
Windows下用PyCharm和Visual Studio开始Python编程
Oct 26 #Javascript
php利用curl获取远程图片实现方法
Oct 26 #Javascript
jQuery.trim() 函数及trim()用法详解
Oct 26 #Javascript
JavaScript中的数据类型转换方法小结
Oct 26 #Javascript
如何实现JavaScript动态加载CSS和JS文件
Dec 28 #Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
Oct 26 #Javascript
You might like
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
javascript 字符 Escape,encodeURI,encodeURIComponent
2009/07/09 Javascript
js substr、substring和slice使用说明小记
2011/09/15 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
2016/01/05 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
2016/12/26 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
javascript获取指定区间范围随机数的方法
2017/09/08 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
Vue登录主页动态背景短视频制作
2019/09/21 Javascript
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
Python实现LRU算法的2种方法
2015/06/24 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
python 检查文件mime类型的方法
2018/12/08 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
Python使用re模块验证危险字符
2020/05/21 Python
python利用opencv保存、播放视频
2020/11/02 Python
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
事业单位个人总结
2015/02/12 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
公司员工宿舍管理制度
2015/08/07 职场文书
Python中的嵌套循环详情
2022/03/23 Python