使用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 相关文章推荐
JS命名空间的另一种实现
Aug 09 Javascript
javascript实现base64 md5 sha1 密码加密
Sep 09 Javascript
javascript使用Promise对象实现异步编程
Mar 01 Javascript
全面解析Angular中$Apply()及$Digest()的区别
Aug 04 Javascript
Bootstrap Navbar Component实现响应式导航
Oct 08 Javascript
js实现对table的增加行和删除行的操作方法
Oct 13 Javascript
基于hover的用法实例(推荐)
Jul 04 Javascript
一步步教会你微信小程序的登录鉴权
Apr 09 Javascript
React学习笔记之高阶组件应用
Jun 02 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
Dec 03 Javascript
Electron autoUpdater实现Windows安装包自动更新的方法
Dec 24 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
Mar 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里得到前天和昨天的日期的代码
2007/08/16 PHP
php上传图片存入数据库示例分享
2014/03/11 PHP
php实现微信公众平台账号自定义菜单类
2015/10/11 PHP
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
DIV菜单层实现代码
2010/11/19 Javascript
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
JS中call和apply函数用法实例分析
2018/06/20 Javascript
vue项目base64字符串转图片的实现代码
2018/07/13 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
django 修改server端口号的方法
2018/05/14 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
2020/12/08 Python
高三自我鉴定怎么写
2013/10/19 职场文书
会计大学生职业生涯规划书范文
2014/01/13 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
《泉水》教学反思
2014/04/11 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
2014年行政执法工作总结
2014/12/11 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript