使用JS location实现搜索框历史记录功能


Posted in Javascript onDecember 23, 2019

首先,来看下效果图(样式什么的就不必吐槽了哈)

使用JS location实现搜索框历史记录功能

html代码

<form id="hisform">
  <div id="searchbox">
    <input id="inpt" type="text" autocomplete="off" />
    <input id="btn" type="button" value="搜索" />
    <div id="historybox">
      <h3>搜索记录:</h3>
      //用于保存记录信息
      <ul id="list">
      </ul>
    </div>
  </div>
</form>

css代码

* {
   margin: 0;
   padding: 0;
 }
 input {
   border: 0;
   vertical-align: middle;
   float: left;
 }
 #searchbox {
   width: 300px;
   height: 50px;
   background: #fff;
   margin: 100px auto;
   border: 1px solid #ccc;
   position: relative;
 }
 #inpt {
   width: 240px;
   height: 50px;
   outline: none;
   text-indent: 10px;
 }
 #btn {
   width: 60px;
   height: 50px;
   cursor: pointer;
 }
 /* 历史记录框 */
 #historybox {
   width: 280px;
   padding: 10px 10px 50px;
   border: 1px solid #ccc;
   position: absolute;
   top: 50px;
   left: -1px;
   /* 隐藏 */
   display: none;
 }
 #historybox h3 {
   margin-bottom: 10px;
 }
 #list {
   list-style: none;
 }
 #list .on {
   float: left;
   border: 1px solid #ccc;
   background: #aaa;
   height: 30px;
   line-height: 30px;
   margin: 0 2px;
   border: 1px solid #ccc;
   border-radius: 5px;
 }
 #list .active {
   color: #fff;
   text-decoration: none;
   padding: 2px;
 }

js代码(这里需引入jQuery)

$(function () {
  let max_history = 7;// 存储最大历史数据
  // 鼠标移入事件
  $('#inpt').on('focus', function () {
    $('inpt').val = '';
    let data = localStorage.getItem('data'); //从本地存储中读取数据
    if (!data) {
      $('#historybox').css('display', 'none');
    } else {
      $('#historybox').css('display', 'block');
      historydata(JSON.parse(data)); // 渲染数据
    }
  })
  // 鼠标移出事件
  $('#inpt').on('blur', function () {
    $('#historybox').css('display', 'none');
    init_history();// 初始化历史记录,清空记录
  })
  //点击搜索按钮时,将搜索内容添加到本地存储
  $('#btn').on('click', function () {
    var search = inpt.value;
    var data = localStorage.getItem('data'); //从本地存储中读取数据
    if (data) {
      var arr = JSON.parse(data); //如果有数据则转换成对象或数组
    } else {
      var arr = []; //如果没有数据,则新增一条
    }
    arr.push(search);
    removalDuplicate(arr);// 对用户输入值进行处理(去重-筛选)
    localStorage.setItem('data', JSON.stringify(arr)); //将数据写入到本地存储中
  })
  // 数组去重-筛选函数
  function removalDuplicate(arr) {
    for (let i = 0; i < arr.length; i++) {
      var arritem = arr[i].trim(); // 去除字符串两端空格
      // 如果值为空,则不添加
      if (arritem == '') {
        arr.splice(i, 1);
      }
      if (arritem !== "") {
        for (let j = i + 1; j < arr.length; j++) {
          if (arr[i] == arr[j]) {
            arr.splice(i, 1);//如果第二次输入的值与第一次相同,则添加第二次的值
          }
        }
      }
    }
    return arr;
  }
  // 渲染数据
  function historydata(searchArr) {
    searchArr.reverse();//反转,从后往前添加
    // 遍历出数据
    if (searchArr.length <= max_history) {//如果存储数据小于等于max_history,则遍历渲染
      for (let i = 0; i < searchArr.length; i++) {
        $('#list').append(`<li class='on'><a href='#' class='active'>${searchArr[i]}</a><li>`);
      }
    } else {//否则渲染最大历史记录条数
      for (let i = 0; i < max_history; i++) {
        $('#list').append(`<li class='on'><a href='#' class='active'>${searchArr[i]}</a><li>`);
      }
    }
  }
  // 初始化-清空历史记录
  function init_history() {
    $('#list').html('');
  }
})

总结

以上所述是小编给大家介绍的使用JS location实现搜索框历史记录功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
jquery Moblie入门—hello world的示例代码学习
Jan 08 Javascript
jQuery 获取URL的GET参数值的小例子
Apr 18 Javascript
php中给js数组赋值方法
Mar 10 Javascript
JavaScript事件委托技术实例分析
Feb 06 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
Feb 14 Javascript
JavaScript 实现 Tab 点击切换实例代码
Mar 25 Javascript
express如何使用session与cookie的方法
Jan 30 Javascript
微信小程序radio组件使用详解
Jan 31 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
Aug 27 Javascript
async/await让异步操作同步执行的方法详解
Nov 01 Javascript
JavaScript 判断浏览器是否是IE
Feb 19 Javascript
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
vue实现移动端图片上传功能
Dec 23 #Javascript
vue实现拖拽效果
Dec 23 #Javascript
JQuery常用选择器功能与用法实例分析
Dec 23 #jQuery
Jquery属性的获取/设置及样式添加/删除操作技巧分析
Dec 23 #jQuery
JQuery中DOM节点的操作与访问方法实例分析
Dec 23 #jQuery
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 #jQuery
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
Dec 23 #Javascript
You might like
php URL验证正则表达式
2011/07/19 PHP
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
php打包压缩文件之ZipArchive方法用法分析
2016/04/30 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
UpdatePanel和Jquery冲突的解决方法
2013/04/01 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
js+canvas实现简单扫雷小游戏
2021/01/22 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
python 中文乱码问题深入分析
2011/03/13 Python
详谈python http长连接客户端
2017/06/12 Python
Python机器学习之决策树算法
2017/12/22 Python
Python3使用SMTP发送带附件邮件
2020/06/16 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
python读取指定字节长度的文本方法
2019/08/27 Python
python 操作excel表格的方法
2020/12/05 Python
美国知名生活购物网站:Goop
2017/11/03 全球购物
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
升职自荐信
2013/11/28 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
赢在执行观后感
2015/06/16 职场文书
销售会议开幕词
2016/03/04 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers
为Centos安装指定版本的Docker
2022/04/01 Servers