javascript本地化存储localStorage的实战用法

简介: javascript本地化存储localStorage的实战用法

HTML

<div class="col-lg-6" style="margin-top:20px;">
    <div class="input-group">
        <input type="text" class="form-control" id="keywords" placeholder="输入关键词">
                <span class="input-group-btn">
                    <button class="btn btn-default" id="search" type="button">搜索</button> <span id="empty">清除历史</span>
                </span>
    </div>
</div>
</div>
<br><br>
<div style="margin:20px 20px 0px 20px;">
    <span>搜索历史</span>
</div>
<div style="margin:20px;" id="history"></div>


JS代码

    $(function () {
        update_history();
        // 绑定回车事件
        $(document).keydown(function (event) {
            if (event.keyCode == 13) {
                $("#search").click();
            }
        });
        // 搜索点击事件
        $("#search").click(function () {
            var keywords = $("#keywords").val();
            history(keywords); //添加到缓存
            update_history(); //更新搜索历史
        })
        // 清空搜索历史
        $("#empty").click(function () {
            mystorage.remove('keywords');
            $("#history").html(" ");
        })
    })
    /**
     * [update_history 更新搜索历史]
     * @return {[type]} [description]
     */
    function update_history() {
        //console.log(mystorage.get("keywords"));
        var history = mystorage.get("keywords");
        if (history) {
            var html = "";
            $.each(history, function (i, v) {
                html += "<a class='btn btn-default' id='btn" + i + "' href='javascript:" + getVal(i, v) + ";'  role='button'>" + v + "</a> "
            })
            $("#history").html(html);
        }
    }
    //获取历史记录传递到输入框;
    function getVal(i, v) {
        $(function () {
            $("#btn" + i).click(function () {
                $("#keywords").val(v);
            })
        })
    }
    /**
     * [history //搜索历史函数存储]
     * @param  {[type]} value [搜索词]
     * @return {[type]}       [description]
     */
    function history(value) {
        var data = mystorage.get("keywords");
        if (!data) {
            var data = []; //定义一个空数组
        } else if (data.length === 10) { //搜索历史数量
            data.shift();  //删除数组第一个元素有
        } else {
        }
        if (value) {  //判断搜索词是否为空
            if (data.indexOf(value) < 0) {  //判断搜索词是否存在数组中
                data.push(value);    //搜索词添加到数组中
                mystorage.set("keywords", data);  //存储到本地化存储中
            }
        }
    }
    /**
     * [mystorage 存储localstorage时候最好是封装一个自己的键值,在这个值里存储自己的内容对象,封装一个方法针对自己对象进行操作。避免冲突也会在开发中更方便。]
     * @param  {String} ){ var ms [description]
     * @return {[type]}     [description]
     */
    var mystorage = (function mystorage() {
        var ms = "mystorage";
        var storage = window.localStorage;
        if (!window.localStorage) {
            alert("浏览器不支持localStorage");
            return false;
        }
        var set = function (key, value) {
            //存储
            var mydata = storage.getItem(ms);
            if (!mydata) {
                this.init();
                mydata = storage.getItem(ms);
            }
            mydata = JSON.parse(mydata);
            mydata.data[key] = value;
            storage.setItem(ms, JSON.stringify(mydata));
            return mydata.data;
        };
        var get = function (key) {
            //读取
            var mydata = storage.getItem(ms);
            if (!mydata) {
                return false;
            }
            mydata = JSON.parse(mydata);
            return mydata.data[key];
        };
        var remove = function (key) {
            //读取
            var mydata = storage.getItem(ms);
            if (!mydata) {
                return false;
            }
            mydata = JSON.parse(mydata);
            delete mydata.data[key];
            storage.setItem(ms, JSON.stringify(mydata));
            return mydata.data;
        };
        var clear = function () {
            //清除对象
            storage.removeItem(ms);
        };
        var init = function () {
            storage.setItem(ms, '{"data":{}}');
        };
        return {
            set: set,
            get: get,
            remove: remove,
            init: init,
            clear: clear
        };
    })();


Done!

相关文章
|
4月前
|
人工智能 自然语言处理 JavaScript
通义灵码2.5实战评测:Vue.js贪吃蛇游戏一键生成
通义灵码基于自然语言需求,快速生成完整Vue组件。例如,用Vue 2和JavaScript实现贪吃蛇游戏:包含键盘控制、得分系统、游戏结束判定与Canvas动态渲染。AI生成的代码符合规范,支持响应式数据与事件监听,还能进阶优化(如增加启停按钮、速度随分数提升)。传统需1小时的工作量,使用通义灵码仅10分钟完成,大幅提升开发效率。操作简单:安装插件、输入需求、运行项目即可实现功能。
241 4
 通义灵码2.5实战评测:Vue.js贪吃蛇游戏一键生成
|
2月前
|
JavaScript 前端开发 算法
流量分发代码实战|学会用JS控制用户访问路径
流量分发工具(Traffic Distributor),又称跳转器或负载均衡器,可通过JavaScript按预设规则将用户随机引导至不同网站,适用于SEO优化、广告投放、A/B测试等场景。本文分享一段不到百行的JS代码,实现智能、隐蔽的流量控制,并附完整示例与算法解析。
82 1
|
11月前
|
自然语言处理 JavaScript 前端开发
深入理解JavaScript中的闭包:原理与实战
【10月更文挑战第12天】深入理解JavaScript中的闭包:原理与实战
|
6月前
|
监控 JavaScript 前端开发
MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver:原理与实战案例
MutationObserver 是一个非常强大的 API,提供了一种高效、灵活的方式来监听和响应 DOM 变化。它解决了传统 DOM 事件监听器的诸多局限性,通过异步、批量的方式处理 DOM 变化,大大提高了性能和效率。在实际开发中,合理使用 MutationObserver 可以帮助我们更好地控制 DOM 操作,提高代码的健壮性和可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver:原理与实战案例
|
6月前
|
JavaScript 前端开发 Java
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
柯里化是一种强大的函数式编程技术,它通过将函数分解为单参数形式,实现了灵活性与可复用性的统一。无论是参数复用、延迟执行,还是函数组合,柯里化都为现代编程提供了极大的便利。 从 Redux 的选择器优化到复杂的数据流处理,再到深度嵌套的函数优化,柯里化在实际开发中展现出了非凡的价值。如果你希望编写更简洁、更优雅的代码,柯里化无疑是一个值得深入学习和实践的工具。从简单的实现到复杂的应用,希望这篇博客能为你揭开柯里化的奥秘,助力你的开发之旅! 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
|
11月前
|
JavaScript 前端开发
JS try catch用法:异常处理
【10月更文挑战第12天】try/catch` 是 JavaScript 中非常重要的一个特性,它可以帮助我们更好地处理程序中的异常情况,提高程序的可靠性和稳定性。
483 56
|
9月前
Next.js 实战 (二):搭建 Layouts 基础排版布局
本文介绍了作者在Next.js v15.x版本发布后,对一个旧项目的重构过程。文章详细说明了项目开发规范配置、UI组件库选择(最终选择了Ant-Design)、以及使用Ant Design的Layout组件实现中后台布局的方法。文末展示了布局的初步效果,并提供了GitHub仓库链接供读者参考学习。
296 1
Next.js 实战 (二):搭建 Layouts 基础排版布局
|
JavaScript 前端开发 API
Next.js 实战 (六):如何实现文件本地上传
这篇文章介绍了在Next.js中如何实现文件上传到本地的方法。文章首先提到Next.js官方文档中没有提供文件上传的实例代码,因此开发者需要自行实现,通常有两种思路:使用Node.js原生上传或使用第三方插件如multer。接着,文章选择了使用Node.js原生上传的方式来讲解实现过程,包括如何通过哈希值命名文件、上传到指定目录以及如何分类文件夹。然后,文章展示了具体的实现步骤,包括编写代码来处理文件上传,并给出了代码示例。最后,文章通过一个效果演示说明了如何通过postman模拟上传文件,并展示了上传后的文件夹结构。
216 0
Next.js 实战 (六):如何实现文件本地上传
|
前端开发 API 开发者
Next.js 实战 (五):添加路由 Transition 过渡效果和 Loading 动画
这篇文章介绍了Framer Motion,一个为React设计的动画库,提供了声明式API处理动画和页面转换,适合创建响应式用户界面。文章包括首屏加载动画、路由加载Loading、路由进场和退场动画等主题,并提供了使用Framer Motion和next.js实现这些动画的示例代码。最后,文章总结了这些效果,并邀请读者探讨更好的实现方案。
279 0
Next.js 实战 (五):添加路由 Transition 过渡效果和 Loading 动画
|
9月前
|
存储 JavaScript 前端开发
JavaScript中的数据类型以及存储上的差别
通过本文的介绍,希望您能够深入理解JavaScript中的数据类型及其存储差别,并在实际编程中灵活运用这些知识,以提高代码的性能和稳定性。
166 3