JavaScript实现前端实时搜索功能


Posted in Javascript onMarch 26, 2020

大部分页面都具备搜索功能。而作为前端,我们的目的只是将用户输入的内容返回给后台而后呈现反馈数据给用户,具体实现如下:

1.基本布局:

<div class="searcher">
 <p class="searcher-main">
 <i><img src="img/icon/icon-search-map.png"/></i>
 <input class="searcher-text" placeholder="请输入档口名称"></input>
 </p>
 <p class="searcher-cancel">取消</p>
</div>

这里涉及一个问题如何将搜索图标放入input中,网上有相关资料不做赘述:

.searcher {
 background: rgba(255, 255, 255, 0);
 position: fixed;
 z-index: 999;
 width: 100%;
 height: 6rem;
 text-align: center;
 font-size: 1.6rem;
 }

 .searcher-main {
 background: #F4F4F4;
 position: absolute;
 left: 50%;
 top: 1.2rem;
 margin-left: -45%;
 border-radius: 1.6rem;
 width: 80%;
 height: 3rem;
 line-height: 3rem;
 } 

 .searcher-text {
 width: 80%;
 text-align: center;
 border: none;
 outline: none;
 background: #F4F4F4;
 }

 .searcher-cancel {
 position: absolute;
 width: 10%;
 height: 3rem;
 line-height: 3rem;
 color: #929292;
 top: 1.2rem;
 right: 1rem;
 }

2.step-1:

JavaScript实现前端实时搜索功能

3.js部分

这里要安利IE9以上的oninput事件

onchange事件只在键盘或者鼠标操作改变对象属性,且失去焦点时触发,脚本触发无效。
onkeydown/onkeypress/onkeyup在处理复制、粘贴、拖拽、长按键(按住键盘不放)等细节上并不完善。
onpropertychange不用考虑是否失去焦点,不管js操作还是键盘鼠标手动操作,只要HTML元素属性发生改变即可立即捕获到。遗憾的是,onpropertychange为IE专属的。

//监听input框,实时渲染
 $('.searcher-text').on('input', function() {
 initSearchList();
 });

JQ一般都是用这种+=html的方法,虽然累赘不过通过url或者tag标签里属性传参较容易理解。

//渲染搜索列表
 function initSearchList() {
 var List = $('.searcher-land ul');
 var params = {};
 //搜索过滤字符
 var SEARCH_KEY = $('.searcher-text').val()
 params['action'] = 'get_search_key_list';
 params['market_iid'] = 1001;
 params['search_type'] = TYPE;
 params['search_key'] = replaceIllegalStr(SEARCH_KEY);

 epm.ajax(params, function(result) {
 console.log(result);
 console.log(TYPE)
 var html = '';
 List.html('');
 //有结果
 if(result.data.length > 0) {
  $.each(result.data, function(index, value) {
  goodName = value['goods_name'];
  shopName = value['shop_name'];
  //判断Name类型
  itemName = (goodName) ? goodName : shopName;
  html += '<li class="goods-list">' + itemName + '</li>'
  });
  $('.searcher-list').html(html);
 }
 //无结果
 else {
  html = '<div class="no-goods">暂时无法找到此选项~</div>';
  $('.searcher-list').html(html);
 }
 });
 }

注意这里有一个replaceIllegalStr()方法,类似正则,目的是过滤掉一些无用的符号以免给后端接收数据带来不必要的麻烦。

function replaceIllegalStr(str) {
 var reg;
 var illegal_list = ["/", "\\",
 "[", "]",
 "{", "}",
 "<", ">",
 "<", ">",
 "「", "」",
 ":", ";",
 "、", "•",
 "^", "'", "\"",
 "\r", "\r\n", "\\n", "\n"];
 for (var i = 0; i < illegal_list.length; i++) {
 if (str.indexOf(illegal_list[i]) >= 0) {
 if (illegal_list[i] == '\\' || illegal_list[i] == '[') {
 reg = new RegExp('\\' + illegal_list[i], "g");
 } else {
 reg = new RegExp(illegal_list[i], "g");
 }
 str = str.replace(reg, '');
 }
 }
 return str.trim();
}

4.step-2:

JavaScript实现前端实时搜索功能

5.缓存

这里我们将点击的数据保存在本地缓存里,供取用呈现:
注: epm是自己封装的一个方法与属性的对象

//设置缓存
 epm.setLocalItem = function(key, value) {
 if (window.localStorage) {
 localStorage.setItem(key, value);
 } else {
 //后备方案
 setCookie(key, value);
 }
 };
//提取缓存
 epm.getLocalItem = function(key) {
 if (window.localStorage) {
 return localStorage.getItem(key);
 } else {
 //后备方案
 return getCookie(key);
 }
 };
//删除缓存
 epm.removeLocalItem = function(key) {
 if (window.localStorage) {
 localStorage.removeItem(key);
 } else {
 //后备方案
 removeCookie(key);
 }
 };

JavaScript实现前端实时搜索功能

6.step-3

得到点击的相应的缓存词里的value,再次发送ajax:

JavaScript实现前端实时搜索功能

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
在IE下:float属性会影响offsetTop的取值
Dec 22 Javascript
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
Apr 21 Javascript
javascript 广告后加载,加载完页面再加载广告
Nov 25 Javascript
基于jQuery的公告无限循环滚动实现代码
May 11 Javascript
JS实现两表格里数据来回转移的方法
May 28 Javascript
JavaScript实现动态删除列表框值的方法
Aug 12 Javascript
JavaScript实现广告弹窗效果
Aug 09 Javascript
微信小程序之MaterialDesign--input组件详解
Feb 15 Javascript
javascript 使用正则test( )第一次是 true,第二次是false
Feb 22 Javascript
Vue2.0 UI框架ElementUI使用方法详解
Apr 14 Javascript
五步轻松实现JavaScript HTML时钟效果
Mar 25 Javascript
微信小程序实现抖音播放效果的实例代码
Apr 11 Javascript
用 js 的 selection range 操作选择区域内容和图片
Apr 18 #Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
Apr 18 #Javascript
Angularjs根据json文件动态生成路由状态的实现方法
Apr 17 #Javascript
微信小程序实战之轮播图(3)
Apr 17 #Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
Jun 19 #Javascript
微信小程序实战之上拉(分页加载)效果(2)
Apr 17 #Javascript
微信小程序教程系列之新建页面(4)
Apr 17 #Javascript
You might like
深入了解php4(2)--重访过去
2006/10/09 PHP
PHP 学习路线与时间表
2010/02/21 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
详解vue2.6插槽更新v-slot用法总结
2019/03/09 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
跟老齐学Python之开始真正编程
2014/09/12 Python
通过代码实例展示Python中列表生成式的用法
2015/03/31 Python
flask入门之文件上传与邮件发送示例
2018/07/18 Python
python3.6.3转化为win-exe文件发布的方法
2018/10/31 Python
PHP统计代码行数的小代码
2019/09/19 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
Tensorflow全局设置可见GPU编号操作
2020/06/30 Python
Python csv文件记录流程代码解析
2020/07/16 Python
详解Pytorch显存动态分配规律探索
2020/11/17 Python
Python 实现键盘鼠标按键模拟
2020/11/18 Python
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
思想品德自我鉴定
2013/10/12 职场文书
学校文明单位申报材料
2014/05/06 职场文书
师德师风自查总结
2014/10/14 职场文书
大学生个人总结范文
2015/02/15 职场文书
毕业生就业推荐表自我鉴定
2019/06/20 职场文书
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android
Spring Cloud 中@FeignClient注解中的contextId属性详解
2021/09/25 Java/Android