使用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模拟页面加载进度条的实现代码
Dec 19 Javascript
如何在一个页面显示多个百度地图
Apr 07 Javascript
jQuery选择器全面总结
Jan 06 Javascript
JsRender for object语法简介
Oct 31 Javascript
JavaScript获取当前日期是星期几的方法
Apr 06 Javascript
常见JS验证脚本汇总
Dec 01 Javascript
js实现的在线调色板功能完整实例
Dec 21 Javascript
微信小程序 封装http请求实例详解
Jan 16 Javascript
d3绘制基本的柱形图的实现代码
Dec 12 Javascript
JS栈stack类的实现与使用方法示例
Jan 31 Javascript
关于Vue源码vm.$watch()内部原理详解
Apr 26 Javascript
利用es6 new.target来对模拟抽象类的方法
May 10 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在线打包程序源码
2008/07/27 PHP
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
php利用单例模式实现日志处理类库
2014/02/10 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
laravel5实现微信第三方登录功能
2018/12/06 PHP
解决php extension 加载顺序问题
2019/08/16 PHP
文本框回车提交与禁止提交示例
2013/09/27 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
javascript计算对象长度的方法
2017/10/25 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
2016/06/03 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
2017/08/23 Python
Python实现识别手写数字 Python图片读入与处理
2020/03/23 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
python3让print输出不换行的方法
2020/08/24 Python
Python用Jira库来操作Jira
2020/12/28 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
css3实现的多级渐变下拉菜单导航效果代码
2015/08/31 HTML / CSS
美国旅游网站:Tours4Fun
2017/02/17 全球购物
AssertionError 跟一下那个类是 “is – a”的关系
2012/02/21 面试题
简单的JAVA编程面试题
2013/03/19 面试题
平面设计师工作职责范文
2013/12/03 职场文书
教师节活动主持词
2014/04/02 职场文书
经济贸易专业自荐信
2014/06/11 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
应届生求职自荐信
2014/07/04 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
大学生就业意向书
2015/05/11 职场文书
Golang 实现超大文件读取的两种方法
2021/04/27 Golang
Android中的Launch Mode详情
2022/06/05 Java/Android