使用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 相关文章推荐
屏蔽Flash右键信息的js代码
Jan 17 Javascript
JavaScript 选中文字并响应获取的实现代码
Aug 28 Javascript
JS图片无缝滚动(简单利于使用)
Jun 17 Javascript
判断js对象是否拥有某一个属性的js代码
Aug 16 Javascript
javascript函数式编程实例分析
Apr 25 Javascript
微信支付如何实现内置浏览器的H5页面支付
Sep 25 Javascript
javascript使用递归算法求两个数字组合功能示例
Jan 03 Javascript
关于Ajax的原理以及代码封装详解
Sep 08 Javascript
JavaScript 五大常见函数
Mar 23 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
Jul 12 Javascript
vue form check 表单验证的实现代码
Dec 09 Javascript
TypeScript魔法堂之枚举的超实用手册
Oct 29 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
上海牌131型七灯四波段四喇叭一级收音机
2021/03/02 无线电
用缓存实现静态页面的测试
2006/12/06 PHP
php jq jquery getJSON跨域提交数据完整版
2013/09/13 PHP
析构函数与php的垃圾回收机制详解
2013/10/28 PHP
ThinkPHP3.1查询语言详解
2014/06/19 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
解析javascript 实用函数的使用详解
2013/05/10 Javascript
点击页面其它地方隐藏该div的两种思路
2013/11/18 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
通过button将form表单的数据提交到action层的实例
2017/09/08 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
vue通过style或者class改变样式的实例代码
2018/10/30 Javascript
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
python写的ARP攻击代码实例
2014/06/04 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
Python 爬虫学习笔记之多线程爬虫
2016/09/21 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
python如何读写json数据
2018/03/21 Python
python3正则提取字符串里的中文实例
2019/01/31 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
英国森林假期:Forest Holidays
2021/01/01 全球购物
25道Java面试题集合
2013/05/21 面试题
劳动竞赛活动方案
2014/02/20 职场文书
建筑安全员岗位职责
2014/03/13 职场文书
党建工作整改措施
2014/10/28 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers
Python实现GIF动图以及视频卡通化详解
2021/12/06 Python