使用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 ajax请求实例深入解析
Nov 26 Javascript
详解JavaScript函数绑定
Aug 18 Javascript
javascript中match函数的用法小结
Feb 08 Javascript
再次谈论React.js实现原生js拖拽效果引起的一系列问题
Apr 03 Javascript
微信小程序之小豆瓣图书实例
Nov 30 Javascript
jQuery+ajax的资源回收处理机制分析
Jan 07 Javascript
基于jquery实现二级联动效果
Mar 30 jQuery
JS二叉树的简单实现方法示例
Apr 05 Javascript
浅谈node模块与npm包管理工具
Jan 03 Javascript
Vue项目移动端滚动穿透问题的实现
May 19 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
Jul 28 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
Aug 30 Javascript
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连接Access数据库错误及解决方法
2013/06/20 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
php微信公众号开发之简答题
2018/10/20 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
JS 建立对象的方法
2007/04/21 Javascript
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
javascript奇异的arguments分析
2010/10/20 Javascript
script标签的 charset 属性使用说明
2010/12/04 Javascript
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
jQuery基于扩展简单实现倒计时功能的方法
2016/05/14 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
jQuery插件Validation表单验证详解
2018/05/26 jQuery
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
python实现dict版图遍历示例
2014/02/19 Python
初学Python函数的笔记整理
2015/04/07 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
英国排名第一的最新设计师品牌手表独立零售商:TIC Watches
2016/09/24 全球购物
十八届三中全会宣传方案
2014/02/21 职场文书
高中生家长寄语大全
2014/04/03 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android
SpringBoot整合Redis入门之缓存数据的方法
2021/11/17 Redis
在Docker容器中部署SQL Server
2022/04/11 Servers