Web本地存储

203 阅读2分钟

QQ截图20210506130655.jpg

1.Web 本地存储简介

1.SessionStorage和LocalStorage都是浏览器本地存储,统称为Web Storage,存储内容大小一般支持5-10MB

2.浏览器端通过 Window.sessionStorage 和 Window.localStorage 属性来实现本地存储机制。

3.sessionStorage(临时存储): 为每一个数据源维持一个存储区域,在浏览器打开期间存在,包括页面重新加载

4.localStorage(长期存储): 与 sessionStorage 一样,但是浏览器关闭后,数据依然会一直存在

2.localStorage / sessionStorage的使用(两者基本一致)

1、存储

window.xxxStorage.setItem(key, value)

xxxStorage.key = value

2、获取

window.xxxStorage.getItem(key)

xxxStorage.key

3、删除某个数据

window.xxxStorage.removeItem(key)

4、删除全部数据

window.xxxStorage.clear()

5、长度属性

window.xxxStorage.length

6.返回存储对象中第 n 个键的名称(即按索引取键)

window.xxxStorage.key(n)

案例:留言板

  • demo.css
* {
     margin: 0 auto;
     padding: 0;
     font-family: "Microsoft YaHei", "sans-serif";
}

.container {
     margin-top: 20px;
}

.btn {
     padding: 5px 10px;
}

.messageList {
     position: relative;
}

.messageList .delete_item {
     position: absolute;
     top: 50%;
     right: 20px;
     transform: translateY(-50%);
     padding: 5px 10px;
}
  • demo.js
$(function () {
    //提交
    $(".btn-box .submit").click(function () {
        var _name = $(".name").val(),
            _msg = $(".message").val();
        if (!_name || !_msg) {
            alert('请输入信息')
        } else {
            localStorage.setItem(_name, _msg);
            $(".name, .message").val(''); //清空数据
            listShow();
        }
    });

    //查看
    $(".btn-box  .viewMes").click(function () {
        listShow();
    })

    //删除全部留言
    $(".btn-box  .deleteAll").click(function () {
        $(".messageList").html("");
        localStorage.clear();
    })

    $(".messageList").on("click", ".delete_item", function () {
        $(this).parent().remove();
        localStorage.removeItem($(this).parent().children(".key").text());
    });

    //列表展示
    function listShow() {
        var str = '';
        for (var i = 0; i < localStorage.length; i++) {
            var _key = localStorage.key(i), //获取key
                _value = localStorage.getItem(_key); //通过key获取value
            str += '<li class="list-group-item"><span class="key">' + _key +
                '</span>说:<span class="value">' + _value + '</span><button class="delete_item">删除</button></li>';
        };
        $(".messageList").html(str);
    }

})
  • index.html
<link href="css/bootstrap.min.css" rel="stylesheet" />
<link href="css/demo.css" rel="stylesheet" />
<script src="js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="js/demo.js"></script>

<div class="container">
    <div class="form-horizontal">
        <div class="form-group">
            <label class="col-sm-1 control-label">昵称:</label>
            <div class="col-sm-11">
                <input type="email" class="form-control name" id="inputEmail3" placeholder="请输入昵称">
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-1 control-label">留言:</label>
            <div class="col-sm-11">
                <textarea class="form-control message" rows="5" placeholder="请输入内容"></textarea>
            </div>
        </div>
        <div class="form-group  btn-box">
            <div class="col-sm-offset-1 col-sm-11">
                <button type="submit" class="btn btn-success submit">提交留言</button>
                <button class="btn btn-primary viewMes">查看留言</button>
                <button class="btn btn-danger deleteAll">删除留言</button>
            </div>
        </div>
    </div>

    <div class="panel panel-primary">
        <div class="panel-heading">留言列表</div>
        <div class="panel-body">
            <ul class="list-group messageList">
                <!-- <li class="list-group-item">张三
                <span>说:</span>大家好!
                </li> -->
            </ul>
        </div>
    </div>
</div>

3.如何实现浏览器跨页面通信 - localStorage + storage事件(重点!)

1.storage事件:

​ 1)Storage对象发生变化时触发(即创建/更新/删除数据项时,Storage.clear() 只会触发一次)

​ 2)在同一个页面内发生的改变不会起作用

​ 3)在相同域名下的其他页面发生的改变才会起作用。(修改的页面不会触发事件,与它共享的页面会触发事件)

​ 4)event事件对象的属性

​ key:修改或删除的key值,如果调用clear(),为null

​ newValue:新设置的值,如果调用clear(),为null

​ oldValue:调用改变前的value值,如果调用clear(),为null

​ url:触发该脚本变化的文档的url

​ storageArea:当前的storage对象

2.使用方法:

window.addEventListener('storage',function (event) {
    //此处写具体业务逻辑
})

案例:多页面输入框数据同步

  • index1.html
<input type="text" id="input">
<script type="text/javascript">
    let input = document.getElementById('input')
    input.onblur = function () {
        localStorage.setItem('demo', input.value)
    }
</script>
  • index2.html
<input type="text" id="input">
<script type="text/javascript">
    let input = document.getElementById('input')
    window.addEventListener('storage', function (event) {
      console.log(event)
      input.value = event.newValue
    })
</script>