H5与web端如何用localStorage实现历史纪录?

1.使用jq完成localStorage实现历史纪录版。

    代码如下:

<!DOCTYPE html>
<html>

    <head lang="en">
        <meta charset="UTF-8">
        <title>没毛病</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <meta name="apple-mobile-web-app-capable" content="no">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <meta name="format-detection" content="telephone=no">
        <style>
            .history {
                text-align: center;
            }

            #sec {
                width: 50%;
                overflow: hidden;
                text-align: left;
                height: 38px;
                border: 1px solid #ccc;
                border-radius: 10px;
            }

            .delete:after {
                clear: both;
                content: ‘.‘;
                display: block;
                width: 0;
                height: 0;
                visibility: hidden;
            }

            .delete>div {
                border-radius: 50px;
                float: left;
                height: 23px;
                border: 1px solid #ccc;
                background: #E0E0E0;
                margin-top: 14px;
                margin-right: 10px;
                overflow: hidden;
            }

            #search {
                width: 141px;
                height: 37px;
                font-size: 14px;
                line-height: 14px;
                color: #959595;
                padding-bottom: 2px;
            }

            #his-dele {
                width: 22px;
                height: 22px;
                line-height: 22px;
                display: inline-block;
                background: #E0E0E0;
                color: #fff;
                border-radius: 50%;
                text-align: center;
                margin-left: 10px;
                float: right;
                position: relative;
                top: -26px;
            }
        </style>
    </head>

    <body>
        <input class="" id="sec">
        <!--搜索框-->
        <button id="search">搜索</button>

        <!--历史记录-->
        <div class="current">最近搜索</div>
        <div class="delete history" style="width: 100%;float: left"></div>

        <!--删除按钮-->
        <div class="history" id="his-dele">X</div>

        <!--无存储记录-->
        <div class="Storage" style="width: 100px;height: 100px;margin: 0 auto;">无存储记录</div>

        <script src="../js/jquery-1.11.0.js"></script>
        <script>
            /*搜索记录相关*/

            var hisTime; //获取搜索时间数组
            var hisItem; //获取搜索内容数组
            var firstKey; //获取最早的1个搜索时间

            function init() {

                hisTime = []; //时间数组置空
                hisItem = []; //内容数组置空

                for(var i = 0; i < localStorage.length; i++) { //数据去重
                    if(!isNaN(localStorage.key(i))) { //判断数据是否合法
                        hisTime.push(localStorage.key(i));
                    }
                }

                if(hisTime.length > 0) {
                    hisTime.sort(); //排序
                    for(var y = 0; y < hisTime.length; y++) {
                        localStorage.getItem(hisTime[y]).trim() && hisItem.push(localStorage.getItem(hisTime[y]));
                    }
                }
                console.log(hisTime);
                console.log(hisItem);
                $(".delete").html(""); //执行init(),每次清空之前添加的节点
                $(".Storage").show();
                for(var i = 0; i < hisItem.length; i++) {

                    $(".delete").prepend(‘<div class="word-break">‘ + hisItem[i] + ‘</div>‘);
                    if(hisItem[i] != ‘‘) {
                        $(".Storage").hide();
                    }
                }

            }

            init(); //调用

            $("#search").click(function() {
                var value = $("#sec").val();
                var time = (new Date()).getTime();

                if(!value) {
                    alert("你未输入搜索内容");
                    return false;
                }
                //输入的内容localStorage有记录

                if($.inArray(value, hisItem) >= 0) {

                    for(var j = 0; j < localStorage.length; j++) {
                        if(value == localStorage.getItem(localStorage.key(j))) {
                            localStorage.removeItem(localStorage.key(j));
                        }
                    }
                    localStorage.setItem(time, value);

                } else {
                    localStorage.setItem(time, value);
                }
                init();

            });

            //清除记录功能
            $("#his-dele").click(function() {
                var f = 0;
                for(; f < hisTime.length; f++) {
                    localStorage.removeItem(hisTime[f]);
                }
                init();
            });

            //苹果手机不兼容出现input无法取值以下是解决方法

            $(".delete").on("click", ".word-break", function() {
                var div = $(this).text();
                $(‘#sec‘).val(div);
            });
        </script>
    </body>

</html>

2.在react的框架中如何实现?

    JS代码如下:

jsinarray(value,hisItem){
      const { organsearchhisTime = {} } = this.state;
    const { hisTime = [] } = organsearchhisTime;
      const time = (new Date()).getTime()+‘‘;
      let firstKey = null;
        if(hisItem != ‘‘){
          console.log(111);
          for( var k in hisItem){
            if( hisItem[k] == value ){
                for(let j = 0; j < localStorage.length; j++) {
                        if(value == localStorage.getItem(localStorage.key(j))) {
                            localStorage.removeItem(localStorage.key(j));
                        }
                    }
                console.log(‘time:‘+hisItem);
                console.log(‘value:‘+value);
                    localStorage.setItem(time, value);
            }
            //清除第一条数(据限制数据为十条)
            if(k == hisItem.length-1){
                if(hisItem.length > 9){
                    firstKey = hisTime[hisTime.length-1];
                        localStorage.removeItem(firstKey);
                    localStorage.setItem(time, value);
                }else{
                    localStorage.setItem(time, value);
                }
            }
        }
      }else{
          console.log(222);
          localStorage.setItem(time, value);
      }
    this.init();
    }

  //历史纪录
  init() {
        let { hisTime, hisItem, organsearchhisTime = {}, organsearchhisItem = {} } = this.state;
        hisTime = [];
        hisItem = [];
        console.log(localStorage)
        for(let i = 0; i < localStorage.length; i++) { //数据去重
            if(!isNaN(localStorage.key(i))) { //判断数据是否合法
                hisTime.push(localStorage.key(i));
            }
        }

        if(hisTime.length > 0) {
            hisTime.sort(); //排序
            for(let y = 0; y < hisTime.length; y++) {
                localStorage.getItem(hisTime[y]).trim() && hisItem.push(localStorage.getItem(hisTime[y]));
            }
        }
        //将数组反序
        hisTime = hisTime.reverse();
        hisItem = hisItem.reverse();
        console.log("hisTime:"+hisTime);
        console.log(".reverse():"+hisItem);
        this.setState({
            organsearchhisTime: {hisTime},
            organsearchhisItem: {hisItem},
        });
    }

  //清除记录
  removeItemhisTime(){
      let f = 0;
      const { organsearchhisTime = {} } = this.state;
    const { hisTime = [] } = organsearchhisTime;
        for(; f < hisTime.length; f++) {
            localStorage.removeItem(hisTime[f]);
        }
        this.init();
  }        

注意:以上代码所存localStorage数据是将一次搜索的文案存为一条localStorage,后续如再有localStorage数据将需要存储,那么就不能用以上的数据格式存储,同时,将会照成大量的localStorage数据,同时给用户带来较多的存储量。

优化:将一个地方使用的localStorage存储数据存在一条localStorage中,不与其他地方localStorage数据冲突,同时减少localStorage的存储数量。

    代码如下:

//是否有一样的
  jsinarray(value,hisItem){
      const { organsearchhisTime = {} } = this.state;
      const time = (new Date()).getTime()+‘‘;
      let firstKey = null;
      let arrayList= JSON.parse(localStorage.getItem("historylist"))||[];
//    console.log(arrayList)
      //输入的内容localStorage有记录
      let obj={‘name‘:value}
      if(arrayList.length>0){
        for( let k in arrayList){
            if(arrayList[k].name==value){
                arrayList.splice(k,1);
            }
        }
        if(arrayList.length>9){
            arrayList.pop();
            arrayList.unshift(obj);
        }else{
            arrayList.unshift(obj);
        }
    }else{
        arrayList.push(obj);
    }
      localStorage.setItem(‘historylist‘, JSON.stringify(arrayList));
    this.init();
    }

  //历史纪录
  init() {
        let { hisItem, organsearchhisTime = {}, organsearchhisItem = {} } = this.state;
        hisItem = [];
        console.log(localStorage);
        hisItem = localStorage.getItem(‘historylist‘);
        hisItem = JSON.parse(hisItem);
        console.log(hisItem);
//        console.log(students);
        if(hisItem == null){
            hisItem = "";
            this.setState({
                organsearchhisItem: {hisItem},
            });
        }else{
            this.setState({
                organsearchhisItem: {hisItem: hisItem.map((historylist) => { return historylist.name })},
            });
        }
    }

  //清除记录
  removeItemhisTime(){
        localStorage.removeItem("historylist");
        this.init();
  }

以上优化的是react中使用的 localStorage 方法,jq版原理也是一样的,我这就不一一做优化了。

原文地址:https://www.cnblogs.com/dreambin/p/9639465.html

时间: 2024-10-13 13:28:51

H5与web端如何用localStorage实现历史纪录?的相关文章

h5聊天室web端(仿微博、微信)|h5仿微信网页端|仿微信界面弹窗

html5开发的仿微博.微信聊天web端案例,h5仿微信聊天网页版,采用html5+css3+jquery+swiper+wcPop等技术进行布控架构开发,弹窗插件wcPop.js进行了一次全面api升级,修复编辑器插入表情时光标定位错误bug,新增了上传附件及自定义推送内容,另外也新增了个人名片.上传附件.分享等样式,功能上实现了消息.表情的发送,图片.视频全屏预览. 项目运行图: /* --- 用户设置.Start ---*/ // 联系人/群聊切换 $("body").on(&q

web端实时音视频功能开发指南

yun2win官网:www.yun2win.com SDK下载地址:http://www.yun2win.com/h-col-107.html 简介 yun2win-sdk-web提供web端实时音视频功能完整解决方案,方便客户快速集成音视频功能. SDK 提供整套解决方案 yun2win官网:www.yun2win.com SDK下载地址:http://www.yun2win.com/h-col-107.html 开发准备 1.准备Chrome浏览器版本49及以上 2.给网站配置CA证书 3.

Java 消息推送------GoEasy实现服务端推送和web端推送

项目中需要消息推送,又想较低开发成本,具体需求:角色用户在后台管理页面发布一个消息,所有用这个系统的用户无论在哪个页面都能及时收到他发布的消息,后来我在网上查询到了一个第三方的免费推送服务-GoEasy push, 它可以满足我的需求,下面是如何用GoEasy进行信息推送及接收: 第一种:Java服务器端推送,web端接收推送信息 步骤: 从GoEasy官网下载jar包,并放到项目中. https://cdn.goeasy.io/sdk/goeasy-0.1.jar Java代码来了,你没有看错

IOS 多文件上传 Java web端(后台) 使用List&lt;MultipartFile&gt; 接收出现的问题

先上正确的示例: 主要是设置我们的request的content-type为multipart/form-data NSDictionary *param = @{@"assignee" :self.userId, @"projectName" :itemName.text, @"proceedingName":Name.text, @"content" :content.text, @"urgency"

vue仿微信网页版|vue+web端聊天室|仿微信客户端vue版

一.项目介绍 基于Vue2.5.6+Vuex+vue-cli+vue-router+vue-gemini-scrollbar+swiper+elementUI等技术混合架构开发的仿微信web端聊天室——vueWebChat,实现了发送消息.表情(动图),图片.视频预览,右键菜单.截屏.截图可直接粘贴至文本框进行发送. 二.技术框架 MVVM框架:Vue2.5.6 状态管理:Vuex 页面路由:Vue-router iconfont图标:阿里巴巴字体图标库 自定义滚动条:vue-gemini-sc

WEB端缓存机制

什么是WEB缓存 Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本.缓存会根据进来的请求保存输出内容的副本:当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求.比较常见的就是浏览器会缓存访问过网站的网页,当再次访问这个URL地址的时候,如果网页没有更新,就不会再次下载网页,而是直接使用本地缓存的网页.只有当网站明确标识资源已经更新,浏览器才会再次下载网页 数据库数

数据采集之Web端上传文件到Hadoop HDFS

前言 最近在公司接到一个任务,是关于数据采集方面的. 需求主要有3个: 通过web端上传文件到HDFS; 通过日志采集的方式导入到HDFS; 将数据库DB的表数据导入到HDFS. 正好最近都有在这方面做知识储备.正所谓养兵千日,用兵一时啊.学习到的东西只有应用到真实的环境中才有意义不是么. 环境 这里只做模拟环境,而不是真实的线上环境,所以也很简单,如果要使用的话还需要优化优化. OS Debian 8.7 Hadoop 2.6.5 SpringBoot 1.5.1.RELEASE 说明一下,这

安全狗服云web端V3.4(企业服务)版上线

7月3号,服务器安全运维云平台--服云web端V3.4(企业服务)版正式更新上线啦!http://fuyun.safedog.cn/ 企业服务全为了了解并解决企业安全需求而定制.通过这个功能,企业用户可以提出自己所需的所有安全需求,反馈给我们,然后我们将根据用户所提出的需求定制出用户所需的版本,具有针对性地解决用户的安全问题. 6 小时前 上传 服云web端V3.4具体更新内容: 1.优化企业服务内容在界面上的展示,便于用户快速申请.升级企业服务 2.在企业服务中增加安全服务内容 3.升级企业服

Web端控件,页面传值

一.记忆Web端控件需要配合HTML 中的Form表单元素 Label - 在HTML中被编译成<span> Literal - 在HTML中被编译成空 文本类 文本框      <input type="text">                        TextBox 密码框      <input type="password">                 TextBox 属性TextMode="pa