百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

html5之Localstorage本地存储详解

zhezhongyun 2025-01-12 20:16 18 浏览


Localstorage本地存储基本用法

如何创建和访问 localStorage

<script type="text/javascript">localStorage.lastname="Smith";document.write(localStorage.lastname);</script>

上面就创建了一个localStorage。

我们再来做一个刷新页面,增加访问次数的功能!很简单,代码如下:

<script type="text/javascript">if (localStorage.pagecount)

?{

?localStorage.pagecount=Number(localStorage.pagecount) +1;

?}else

?{

?localStorage.pagecount=1;

?}document.write("Visits "+ localStorage.pagecount + " time(s).");</script>

上面是用点的方式进行操作,localStorage还有存储API,具体如下:

  • 调用setItem()方法,将对应的名字和值传递出去,可以实现数据存储

  • 调用getItem()方法,将名字传递出去,可以获取对应的值

  • 调用removeItem()方法,名称作为参数,可以删除对应的数据

  • 调用clear()方法,可以删除所有存储的数据

  • 使用length属性以及key()方法,传入0~length-1的数字,可以枚举所有存储数据的名字

用法如下:

localStorage.setItem("name", "haorooms"); ? ?// 以"name"为名字存储一个字符串localStorage.getItem("name"); ? ? ? ? ? ?// 获取"name"的值// 枚举所有存储的名字/值对for(var i=0; i<localStorage.length; i++){ ? ? ? ?// length表示所有的名值对总数

? ?var name = localStorage.key(i); ? ? ? ? ? ?// 获取第i对的名字

? ?var value = localStorage.getItem(name); ? ? ? ?// 获取该对的值}localStorage.removeItem("name"); ? ? ? ?// 删除"name"项localAStorage.clear(); ? ? ? ? ? ? ? ?// 全部删除

sessionStorage和Localstorage区别

sessionStorage用法和Localstorage用法一样,区别就是,sessionStorage是会话存储,关闭浏览器,存储内容就会被清除。

低版本浏览器存储兼容方案

IE User Data

微软在IE5及之后的IE浏览器中实现了它专属的客户端存储机制——“userData”。

userData可以实现一定量的字符串数据存储,对于IE8以前的IE浏览器中,可以将其用作是Web存储的替代方案。

iLocalStorage插件

由于IE8以下浏览器的本地存储API不一样,所以就写了个插件兼容各大浏览器存储。提供的方法及用法如下:

getItem: 获取属性setItem: 设置属性removeItem: 删除属性iLocalStorage.setItem('key', 'value');console.log(iLocalStorage.getItem('key'));iLocalStorage.removeItem('key');

插件代码

/**

* LocalStorage 本地存储兼容函数

* getItem: 获取属性

* setItem: 设置属性

* removeItem: 删除属性

*

*

* @example

*

? ?iLocalStorage.setItem('key', 'value');

? ?console.log(iLocalStorage.getItem('key'));

? ?iLocalStorage.removeItem('key');

*

*/(function(window, document){

? ?// 1. IE7下的UserData对象

? ?var UserData = {

? ? ? ?userData: null,

? ? ? ?name: location.href,

? ? ? ?init: function(){

? ? ? ? ? ?// IE7下的初始化

? ? ? ? ? ?if(!UserData.userData){

? ? ? ? ? ? ? ?try{

? ? ? ? ? ? ? ? ? ?UserData.userData = document.createElement("INPUT");

? ? ? ? ? ? ? ? ? ?UserData.userData.type = "hidden";

? ? ? ? ? ? ? ? ? ?UserData.userData.style.display = "none";

? ? ? ? ? ? ? ? ? ?UserData.userData.addBehavior("#default#userData");

? ? ? ? ? ? ? ? ? ?document.body.appendChild(UserData.userData);

? ? ? ? ? ? ? ? ? ?var expires = new Date();

? ? ? ? ? ? ? ? ? ?expires.setDate(expires.getDate() + 365);

? ? ? ? ? ? ? ? ? ?UserData.userData.expires = expires.toUTCString();

? ? ? ? ? ? ? ?} catch(e){

? ? ? ? ? ? ? ? ? ?return false;

? ? ? ? ? ? ? ?}

? ? ? ? ? ?}

? ? ? ? ? ?return true;

? ? ? ?},

? ? ? ?setItem: function(key, value){

? ? ? ? ? ?if(UserData.init()){

? ? ? ? ? ? ? ?UserData.userData.load(UserData.name);

? ? ? ? ? ? ? ?UserData.userData.setAttribute(key, value);

? ? ? ? ? ? ? ?UserData.userData.save(UserData.name);

? ? ? ? ? ?}

? ? ? ?},

? ? ? ?getItem: function(key){

? ? ? ? ? ?if(UserData.init()){

? ? ? ? ? ? ? ?UserData.userData.load(UserData.name);

? ? ? ? ? ? ? ?return UserData.userData.getAttribute(key);

? ? ? ? ? ?}

? ? ? ?},

? ? ? ?removeItem: function(key){

? ? ? ? ? ?if(UserData.init()){

? ? ? ? ? ? ? ?UserData.userData.load(UserData.name);

? ? ? ? ? ? ? ?UserData.userData.removeAttribute(key);

? ? ? ? ? ? ? ?UserData.userData.save(UserData.name);

? ? ? ? ? ?}

? ? ? ?}

? ?};

? ?// 2. 兼容只支持globalStorage的浏览器

? ?// 使用: var storage = getLocalStorage();

? ?function getLocalStorage(){

? ? ? ?if(typeof localStorage == "object"){

? ? ? ? ? ?return localStorage;

? ? ? ?} else if(typeof globalStorage == "object"){

? ? ? ? ? ?return globalStorage[location.href];

? ? ? ?} else if(typeof userData == "object"){

? ? ? ? ? ?return globalStorage[location.href];

? ? ? ?} else{

? ? ? ? ? ?throw new Error("不支持本地存储");

? ? ? ?}

? ?}

? ?var storage = getLocalStorage();

? ?function iLocalStorage(){

? ?}

? ?// 高级浏览器的LocalStorage对象

? ?iLocalStorage.prototype = {

? ? ? ?setItem: function(key, value){

? ? ? ? ? ?if(!window.localStorage){

? ? ? ? ? ? ? ?UserData.setItem(key, value);

? ? ? ? ? ?}else{

? ? ? ? ? ? ? ?storage.setItem(key, value);

? ? ? ? ? ?}

? ? ? ?},

? ? ? ?getItem: function(key){

? ? ? ? ? ?if(!window.localStorage){

? ? ? ? ? ? ? ?return UserData.getItem(key);

? ? ? ? ? ?}else{

? ? ? ? ? ? ? ?return storage.getItem(key);

? ? ? ? ? ?}

? ? ? ?},

? ? ? ?removeItem: function(key){

? ? ? ? ? ?if(!window.localStorage){

? ? ? ? ? ? ? ?UserData.removeItem(key);

? ? ? ? ? ?}else{

? ? ? ? ? ? ? ?storage.removeItem(key);

? ? ? ? ? ?}

? ? ? ?}

? ?}

? ?if (typeof module == 'object') {

? ? ? ?module.exports = new iLocalStorage();

? ?}else {

? ? ? ?window.iLocalStorage = new iLocalStorage();

? ?}})(window, document);

其他插件

localForage:https://github.com/mozilla/localForage

store.js:https://github.com/marcuswestin/store.js

------------------

切图网(qietu.com)是一家专门从事html5前端开发的服务机构,长期致力于提供高品质的psd转html5、响应式切图、webapp切图,h5切图等web前端开发服务。

专注web前端开发技术,关注用户体验,加我们公众微信账号:qietuwang(长按复制)

相关推荐

Axure教程

来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。前几天看到有人介绍了axure8的图片放大原型设计步骤(http://www.woshipm.com/rp/24687...

保姆级教程:手把手教你用 Readdy.ai 轻松产品设计与前端开发

本文将为你介绍一款强大的AI工具——Readdy.ai,它不仅能自动生成精美的UI设计稿,还能直接生成可用的前端代码,极大地提升了开发效率。前几天雷神为大家介绍了一款AI设计工具莫高设计,但是...

前端学习保姆级教程,轻松入门 Web 开发

在当今数字化时代,我们每天浏览的网页、使用的各类应用,其美观的界面、流畅的交互体验背后,都离不开前端开发技术的支撑。前端开发,简单来说,就是负责将网站或应用的界面呈现给用户,它直接影响着用户对产品的第...

分享几个css实用技巧

本篇将介绍几个css小技巧,目录如下:自定义引用标签的符号重置所有标签样式禁止文本选择制作小三角形自定义<q>引用标签的符号默认q标签引用符号是浏览器根据不同语言环境自动设置的,当然我们也...

五步做一个高保真可交互原型-Principle教程

这篇教程要介绍的案例是:App界面上调整时间的可交互原型。我们先看一下效果:这个案例用的是Principle这款软件做的。Principle近段时间非常流行的一款做原型的软件。很多公司也用Princi...

asp网站源码安装教程

asp网站源码安装指南1、打开控制面板并单击2、点选管理工具选项3、请单击打开Internet信息服务(IIS)管理器应用查看4、点击开始按钮5、请将项目文件移动到C:inetpubwwwr...

web前端HTML教程——开发环境搭建下载和安装编辑器

html开发环境搭建有一个好的编辑器我们可以方便地的开发项目,编写代码,配置和管理我们的项目。所以我们开始编写html代码之前需要搭建开发环境。基于html项目的开发和代码编写现在网上有很多编辑器,也...

如何用控制台打印日历?

朋友们大家好,今天我给大家带来一个控制台小程序——打印当月的日历,效果如下图:笔者运行这个程序的时候是2022年7月30日,所以在日期的30后面加了一个*符号。这个程序很简单,但有些知识点我也会为大家...

dotnet 值拷贝、浅拷贝、深拷贝详解

简介在.NET中,值拷贝(ValueCopy)主要指的是将一个值类型的实例或对象的值复制到另一个变量中,使两个变量之间互不影响。我们可以从几个维度来详细理解:值拷贝的本质.NET中的类型分...

41 基于Sentinel的限流

Sentinel支持对SpringCloudGateway、Zuul等主流的APIGateway进行限流。从1.6.0版本开始,Sentinel提供了SpringCloud...

Java反射机制:神秘之门的钥匙

Java反射机制:神秘之门的钥匙什么是Java反射?当你第一次听说Java反射的时候,你可能会感到困惑。简单来说,Java反射就是让你在程序运行时动态地操作类和对象的能力。这就像一把钥匙,能够打开Ja...

Java反射机制:魔法般的代码操控

Java反射机制:魔法般的代码操控在这个充满无限可能的编程世界里,Java反射机制就像一位神秘的魔法师,它允许程序在运行时检查类、方法、字段等信息,甚至还能动态调用这些成员。这种能力让Java开发者能...

自己动手从0开始实现一个分布式 RPC 框架

前言为什么要自己写一个RPC框架,我觉得从个人成长上说,如果一个程序员能清楚的了解RPC框架所具备的要素,掌握RPC框架中涉及的服务注册发现、负载均衡、序列化协议、RPC通信协议、Socket通信、异...

C# 实战指南:使用 iText7 高效处理 PDF 文件

1.引言在现代开发中,处理PDF文件是一个常见的需求,例如生成报告、填充表单、设置权限或签名等。iText7是一个功能强大的PDF操作库,支持多种PDF操作,包括表单填充、加密、数字签...

手写代码生成工具实现类似Mybatis-Plus的效果-----02

#全新智己L6全国试驾开启#packagecom.alatus.builder;importcom.alatus.Entity.FieldInfo;importcom.alatus.Ent...