使用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 struts 验证唯一标识(公用方法)
Mar 27 Javascript
Javascript控制input输入时间格式的方法
Jan 28 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
Aug 20 Javascript
BooStrap对导航条的改造实践小结
Sep 21 Javascript
详解javascript立即执行函数表达式IIFE
Feb 13 Javascript
javascript数据结构中栈的应用之符号平衡问题
Apr 11 Javascript
利用express启动一个server服务的方法
Sep 17 Javascript
关于微信公众号开发无法支付的问题解决
Dec 28 Javascript
webpack结合express实现自动刷新的方法
May 07 Javascript
vue+element模态框中新增模态框和删除功能
Jun 11 Javascript
vue使用高德地图根据坐标定位点的实现代码
Aug 22 Javascript
JS前端广告拦截实现原理解析
Feb 17 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 mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
yii2分页之实现跳转到具体某页的实例代码
2016/06/02 PHP
轻松掌握php设计模式之访问者模式
2016/09/23 PHP
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
Javascript 命名空间模式
2013/11/01 Javascript
jquery实现类似淘宝星星评分功能实例
2014/09/12 Javascript
jQuery中find()方法用法实例
2015/01/07 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
bootstrap日历插件datetimepicker使用方法
2016/12/14 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
十分钟带你快速了解React16新特性
2017/11/10 Javascript
理解Koa2中的async&amp;await的用法
2018/02/05 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
理理Vue细节(推荐)
2019/04/16 Javascript
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
Python解惑之整数比较详解
2017/04/24 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
苹果香港官方商城:Apple香港
2016/09/14 全球购物
Joules美国官网:出色的英国风格
2017/10/30 全球购物
初二学习计划书范文
2014/04/27 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
谢师宴家长答谢词
2015/09/30 职场文书
Python语言中的数据类型-序列
2022/02/24 Python
Python实现Hash算法
2022/03/18 Python