使用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 引起的安全问题
Dec 27 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
Oct 29 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
Dec 10 Javascript
每天一篇javascript学习小结(String对象)
Nov 18 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
Dec 04 Javascript
js仿搜狐视频记录片列表展示效果
May 30 Javascript
Node调用Java的示例代码
Sep 20 Javascript
jQuery实现遍历XML节点和属性的方法示例
Apr 29 jQuery
angularJS1 url中携带参数的获取方法
Oct 09 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
Jun 10 Javascript
微信小程序接入腾讯云验证码的方法步骤
Jan 07 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
Nov 05 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
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
jquery提示 &quot;object expected&quot;的解决方法
2009/12/13 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
Jquery实现视频播放页面的关灯开灯效果
2013/05/27 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
基于Vue实例生命周期(全面解析)
2017/08/16 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
2018/07/05 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
python3爬虫之设计签名小程序
2018/06/19 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
Python queue队列原理与应用案例分析
2019/09/27 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
python语言是免费还是收费的?
2020/06/15 Python
django 模型字段设置默认值代码
2020/07/15 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
中学教师管理制度
2014/01/14 职场文书
教师辞职书范文
2015/02/26 职场文书
劳动仲裁调解书
2015/05/20 职场文书
教师节主题班会教案
2015/08/17 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
使用CSS连接数据库的方式
2022/02/28 HTML / CSS
Python几种酷炫的进度条的方式
2022/04/11 Python
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技