使用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 相关文章推荐
php对mongodb的扩展(初识如故)
Nov 11 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
Apr 15 Javascript
2则自己编写的jQuery特效分享
Feb 26 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
Nov 25 Javascript
JavaScript的Vue.js库入门学习教程
May 23 Javascript
js前端面试题及答案整理(一)
Aug 26 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
Nov 21 Javascript
jQuery ajax的功能实现方法详解
Jan 06 Javascript
React学习笔记之条件渲染(一)
Jul 02 Javascript
EasyUI在Panel上动态添加LinkButton按钮
Aug 11 Javascript
AngularJS中下拉框的基本用法示例
Oct 11 Javascript
使用NestJS开发Node.js应用的方法
Dec 03 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加密扩展库Mcrypt安装和实例
2013/11/10 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
关于Laravel Route重定向的一个注意点
2017/01/16 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
详细讲解JS节点知识
2010/01/31 Javascript
基于Jquery的表格隔行换色,移动换色,点击换色插件
2010/12/22 Javascript
js实现文本框中焦点在最后位置
2014/03/04 Javascript
JavaScript中操作字符串之localeCompare()方法的使用
2015/06/06 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
原生JS实现弹幕效果的简单操作指南
2020/11/10 Javascript
Python决策树分类算法学习
2017/12/22 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
Python提取频域特征知识点浅析
2019/03/04 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
python实现图像拼接功能
2020/03/23 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
后勤园长自我鉴定
2013/10/17 职场文书
电子商务专业推荐信范文
2013/12/02 职场文书
上课说话检讨书大全
2014/01/22 职场文书
网络教育自我鉴定
2014/02/04 职场文书
社区清明节活动总结
2014/07/04 职场文书
创先争优活动心得体会
2014/09/04 职场文书
小学教师师德整改措施
2014/09/29 职场文书
90条交通安全宣传标语
2019/10/12 职场文书
Python 类,对象,数据分类,函数参数传递详解
2021/09/25 Python
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript