功能1:将搜索框中的内容保存到本地存储中

思路:从获取本地存储的数据,判断是否有数据

有数据:获取本地存储中的数据,将其转换成真的数组对象,向这个数组对象中添加搜索内容,再将这个数组用JSON.stringify()转换成字符串对象,将这个字符串对象用setItem()保存到本地存储中

没有数据:就定义一个新数组,将搜索栏中的内容用unshift()添加到数组中,再将这个数组用JSON.stringify()转换成字符串对象,将这个字符串对象用setItem()保存到本地存储中

功能2:将本地存储的数据渲染到页面中

思路:将这个功能封装成一个方法,

首先 获取本地存储的数据,并且转换成真的数组对象,

遍历这个对象,获取数据,并且用字符拼接模板,将这些数据拼接到li标签中,再在ul中显示;

这个方法要在点击搜索按钮的时候调用一次更新页面数据

功能3:清空页面的历史记录,并且删除本地存储的数据

思路:给清空按钮注册事件,利用removeItem()来移出本地存储

再重新调用一个渲染页面的函数

功能4,:当点击某个搜索记录的时候,删除这个记录

思路:这里需要用到事件委派,给ul绑定事件监听,要在每个li标签上添加自定义属性,data-index=${i}来保存当前li的索引,后面用e.target.dataset['index']来获取当前事件源的索引

当点击某个所搜记录的时候,要判断点击对象的节点是否是LI,用event.target.nodeName来获取节点名

如果是,就要获取本地存储的数据并且将其转换成真的数组对象,再用splice()删除数组中元素,添加参数e.target.dataset['index']和1,就是删除数组中改索引下的数据

再将删除后的数组转成字符串对象保存到本地存储中,再重新渲染一下页面

 <header><input type="text" id="search"><input type="button" id="btn" value="搜索"></header><main><div><h3>搜索记录</h3><span id="clear">清空</span></div><ul id="searchList"></ul></main>
 * {margin: 0;padding: 0;}ul {list-style: none;}header {padding: 10px;line-height: 36px;margin-bottom: 20px;}header input {height: 36px;outline: none;}header #search {width: 80%;border-radius: 18px;border: 1px solid #ccc;}header #btn {width: 15%;background-color: plum;color: #fff;border-radius: 6px;border: none;}main {padding: 10px;}main>div {display: flex;justify-content: space-between;}ul>li {float: left;padding: 5px;margin: 10px;background-color: #ccc;color: #fff;border-radius: 5px;}
   window.onload = function() {showLog()btn.addEventListener('click', function() {// 获取搜索栏的值let userVal = search.valuelet arr = []// 获取本地存储的内容let localCon = localStorage.getItem('searches')arr = localStorage.getItem('searches') ? arr = JSON.parse(localStorage.getItem('searches')) : []if (userVal) {arr.unshift(userVal)}// 将数组转化成字符串对象,放到本地存储中localStorage.setItem('searches', JSON.stringify(arr))// 渲染数据到网页中showLog()// 清空搜索框search.value = ''})// 清空clear.addEventListener('click', function() {localStorage.removeItem('searches')// localStorage.clear()showLog()// searchList.innerHTML = ''})// 事件委派searchList.addEventListener('click', function(e) {// console.log(e.target.index);if (e.target.nodeName == 'LI') {let datas = JSON.parse(localStorage.getItem('searches'))console.log(e.target.dataset['index']);datas.splice(e.target.dataset['index'], 1)localStorage.setItem('searches', JSON.stringify(datas))showLog()}})// 页面加载的时候将本地存储的内容显示到页面function showLog() {let locals = JSON.parse(localStorage.getItem('searches')) || []let htmllis = ''for (let i = 0; i < locals.length; i++) {htmllis += `<li data-index=${i}>${locals[i]}</li>`}searchList.innerHTML = htmllis}}

原生js实现搜索历史记录案例相关推荐

  1. vuejs 原生JS 拖拽事件案例

    原生JS or Vue 事件案例合集(详细) 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 Section 1 单个或多个鼠标拖拽事件的理解 提示:写完文章后,目录可以自动生成,如 ...

  2. 原生js实现 搜索框 点击搜索 清空历史记录

    实现思路 1.点击搜索框:注册点击事件 2.获取用户输入的值 3.将用户输入的值添加到本地存储:1)由于输入不止一个值且后期需要保存相关数据,故一定要存成数组或对象,所以要定义一个空数组2)由于值可能 ...

  3. 原生JS学习 DOM (案例)

    文章目录 1.JS的DOM是什么? 2.DOM的用处 3.查询DOM对象 3.1 基础查询函数(常见DOM操作) 3.2 查询其他标签 3.3思考:备注:什么是标签?什么是节点? 3.4标签对象操作 ...

  4. 原生js编写小米购物车

    原生js编写小米购物车案例 思路 一.将数据渲染到下方ul中 1.遍历数据添加到li标签内 二.渲染购物车内容,将ul中li添加到购物车.添加点击事件 1.加入购物车内容1.判断购物车内需不需要添加此 ...

  5. 原生JS实现拼图游戏

    前面的话 练习了10几个原生js小游戏的案例,刚开始是无从下手,而现在有了自己的思路,不再觉得那么的难了.总结起来,还是那句话,"好的代码是时间熬出来的,多练是硬道理!",这篇文章 ...

  6. 原生JS写仿淘宝搜索框(代码+效果),可实现3级搜索哦!

    闲来无事,用原生JS写了一个淘宝搜索框,用的淘宝的接口,可直接进行商品搜索. 写在前面: 1.记得引用jquery啊! 2.有人私信我说css样式不能用,那是因为复制代码的时候,有空格,只需要自己把c ...

  7. 原生JS实现百度搜索功能

    今天呢给大家分享一下自己用原生JS做的一个百度搜索功能,下面上代码: <!DOCTYPE html> <html><head><meta charset=&q ...

  8. JS模拟京东搜索框案例 模拟京东快递单号查询案例

    模拟京东搜索框案例 <!DOCTYPE html> <html lang="en"><head><meta charset="U ...

  9. 原生js 或vue实现60分钟倒计时案例

    使用场景类似于 订单倒计时,或答题倒计时,代码如下 在Vue中封装了如下的方法 data () {return {countdownTxt:'',//要显示的倒计时文案};}, // 定义一个方法 方 ...

  10. 原生JS仿造华为商城案例-实现了简单页面-两种轮播图思路的实现-动态展示数据

    文章目录 功能简介 项目准备 项目说明 方案一:源代码 CSS样式 HTML结构 JS逻辑 方案二:源代码 CSS样式 HTML结构 JS逻辑 功能简介 页面展示 该项目功能实现: 无限滚动轮播图 j ...

最新文章

  1. pip和conda到底有什么不一样?
  2. HDU 1243 最长公共子序列 动态规划
  3. ps4服务器现正维修中,赶快回家试试!国行PS4终解除锁区附详解教程
  4. 学习3D游戏开发进阶之路
  5. Request登录案例
  6. 阿里云轻应用服务器 宝塔面板 mongodb 配置外网连接 其二 配置账号密码
  7. 表格存储 SQL 查询多元索引
  8. python编程书籍资料整理大全
  9. Spark的动态资源分配ExecutorAllocationManager
  10. SAP License:SAP与ORACLE到底谁更强?
  11. oracle 获取日期年份
  12. java 对文件名非法字符处理
  13. 数据库技术与应用知识点小结(上)
  14. Django模板中加减乘除基本语法
  15. python提取一句话中的数字_从Python的字符串列表中提取数字
  16. 1.1股票数据预处理练习
  17. CAN通讯程序C语言,AT90CAN单片机CAN通信模块介绍及软件编程
  18. 医院绩效考核病案首页数据上报的难点及解决方案
  19. 将iTunes降级到12.6版本
  20. 备考H12-221 HCIP-Routing Switching-IERS的一些笔记

热门文章

  1. 高仿富途牛牛-组件化(一)-支持页签拖拽、增删、小工具
  2. chrome F12开发者工具 (二)preview 与response的区别
  3. macos可以升级到指定版本吗_[macOS]如何升级更新 Mac 系统
  4. jQuery获取元素定位位置:给td添加选中样式
  5. -TEST 16 for NOIP 让scar_lyw都绝望的T3(120-300)
  6. 含有隐函数的离散常微分方程求解
  7. MacPorts和maxima安装
  8. hosts文件导致无法网页观看视频
  9. 邹恒甫:谈点2002年后海鬼/龟和特聘教授的工资待遇和福利
  10. Excel中Sheet(s)和Worksheet(s)的区别