html5指南-5.使用web storage存储键值对的数据

2016-02-19 12:17 8 1 收藏

有了下面这个html5指南-5.使用web storage存储键值对的数据教程,不懂html5指南-5.使用web storage存储键值对的数据的也能装懂了,赶紧get起来装逼一下吧!

【 tulaoshi.com - Web开发 】

本节课的内容是介绍web storage,使用它在浏览器里存储键值对的数据,功能上像以前的cookie一样,不过他更好,存储的数据可以更大。有两种类型的web storage:local storage和session storage,他们使用相同的实现机制,只是可见性和生命周期不同。
1.使用local storage
我们使用localStorage对象来访问local storage,他返回Storage对象,Storage用来存储键值对的数据,他有下面一些属性和方法:
clear():清楚存储的键值对数据;
getItem(key):通过key获取value值;
key(index):通过索引获取key值;
length:返回键值对的个数;
removeItem(key):通过key移出指定数据;
setItem(key,value):添加一个键值对,当指定key的键值对存在,则实现更新操作;
[key]:通过数组下标的方式,使用key获取指定value值。
Storage对象允许我们存储key和value都是字符串形式的键值对数据,key是唯一的,意味着当我们使用setItem方法添加键值对时,如果key值已经存在的话,将实现更新的操作。我们来看下面的例子:

代码如下:

!DOCTYPE HTML
html
head
titleExample/title
style
body *{float: left;}
table{border-collapse: collapse;margin-left: 50px;}
th, td{padding: 4px;}
th{text-align: right;}
input{border: thin solid black;padding: 2px;}
label{min-width: 50px;display: inline-block;text-align: right;}
#countmsg, #buttons{margin-left: 50px;margin-top: 5px;margin-bottom: 5px;}
/style
/head
body
div
div
labelKey:/labelinput id="key" placeholder="Enter Key" //div
div
labelValue:/labelinput id="value" placeholder="Enter Value" //div
div id="buttons"
button id="add"Add/button
button id="clear"Clear/button
/div
p id="countmsg"There are span id="count"/spanitems/p
/div
table id="data" border="1"
tr
thItem Count:/th
td id="count"-/td
/tr
/table
script
displayData();
var buttons = document.getElementsByTagName('button');
for (var i = 0; i buttons.length; i++) {
buttons[i].onclick = handleButtonPress;
}
function handleButtonPress(e) {
switch (e.target.id) {
case 'add':
var key = document.getElementById('key').value;
var value = document.getElementById('value').value;
localStorage.setItem(key, value);
break;
case 'clear':
localStorage.clear();
break;
}
displayData();
}
function displayData() {
var tableElement = document.getElementById('data');
tableElement.innerHTML = '';
var itemCount = localStorage.length;
document.getElementById('count').innerHTML = itemCount;
for (var i = 0; i itemCount; i++) {
var key = localStorage.key(i);
var val = localStorage.getItem(key);
tableElement.innerHTML += 'trth' + key + ':/thtd' + val + '/td/tr';
}
}
/script
/body
/html

我们来看运行结果

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)
浏览器不能删除我们通过localStorage创建的数据,除非用户删除它。
2.监听Storage事件
通过local storage存储的数据对同源的文档具有可见性,比如你打开两个chrome浏览器访问同一个url地址,在任何一个页面上创建的local storage对另外一个页面也是可见的。但是如果用别的浏览器(如firefox)打开相同url地址,local storage是不可见的,因为他们不同源了。Storage事件就是用来监听storage的内容发生改变的,下面我们看他包含哪些属性:
key:返回发生改变的key值;
oldValue:返回发生改变key值以前的value值;
newValue:返回发生改变key值新的value值;
url:发生改变的url地址;
storageArea:返回发生改变的Storage对象(是local storage还是session storage)。
下面我们看个例子:

代码如下:

!DOCTYPE HTML
html
head
titleStorage/title
style
table{border-collapse: collapse;}
th, td{padding: 4px;}
/style
/head
body
table id="data" border="1"
tr
thkey/th
tholdValue/th
thnewValue/th
thurl/th
thstorageArea/th
/tr
/table
script
var tableElement = document.getElementById('data');
window.onstorage = function (e) {
var row = 'tr';
row += 'td' + e.key + '/td';
row += 'td' + e.oleValue + '/td';
row += 'td' + e.newValue + '/td';
row += 'td' + e.url + '/td';
row += 'td' + (e.storageArea == localStorage) + '/td/tr';
tableElement.innerHTML += row;
}
/script
/body
/html

我们在例1中增删改storage的数据,会在例2页面上显示出来。例2在chrome浏览器中运行正常,firefox没有反应,其他浏览器没有测试。
运行结果

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)
3.使用session storage
session storage在使用上和local storage一样,只是他的访问性上只限于当前页面,并且页面关闭后会消失,我们通过sessionStorage来访问它。

代码如下:

!DOCTYPE HTML
html
head
titleExample/title
style
body *{float: left;}
table{border-collapse: collapse;margin-left: 50px;}
th, td{padding: 4px;}
th{text-align: right;}
input{border: thin solid black;padding: 2px;}
label{min-width: 50px;display: inline-block;text-align: right;}
#countmsg, #buttons{margin-left: 50px;margin-top: 5px;margin-bottom: 5px;}
/style
/head
body
div
div
labelKey:/labelinput id="key" placeholder="Enter Key" //div
div
labelValue:/labelinput id="value" placeholder="Enter Value" //div
div id="buttons"
button id="add"Add/button
button id="clear"Clear/button
/div
p id="countmsg"There are span id="count"/spanitems/p
/div
table id="data" border="1"
tr
thItem Count:/th
td id="count"-/td
/tr
/table
iframe src="storage.html" width="500" height="175"/iframe
script
displayData();
var buttons = document.getElementsByTagName("button");
for (var i = 0; i buttons.length; i++) {
buttons[i].onclick = handleButtonPress;
}
function handleButtonPress(e) {
switch (e.target.id) {
case 'add':
var key = document.getElementById("key").value;
var value = document.getElementById("value").value;
sessionStorage.setItem(key, value);
break;
case 'clear':
sessionStorage.clear();
break;
}
displayData();
}
function displayData() {
var tableElement = document.getElementById('data');
tableElement.innerHTML = '';
var itemCount = sessionStorage.length;
document.getElementById('count').innerHTML = itemCount;
for (var i = 0; i itemCount; i++) {
var key = sessionStorage.key(i);
var val = sessionStorage.getItem(key);
tableElement.innerHTML += "trth" + key + ":/thtd" + val + "/td/tr";
}
}
/script
/body
/html

运行效果


你在例3中做任何修改,例2的页面不会发生任何改变。
总结: 
sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。
localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。
web storage和cookie的区别:Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。还有,web storage每个域(包括子域)有独立的存储空间,各个存储空间是完全独立的,因此不会造成数据混乱。
但是Cookie也是不可以或缺的:Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地存储数据而生。
源码下载

来源:http://www.tulaoshi.com/n/20160219/1600473.html

延伸阅读
标签: Web开发
在 Internet 连接无处不在的今天,我们忽然有了另外一个需求,离线 Web。Gmail, Google Reader, Zoho 这些优秀的 Web 应用都支持离线使用,这归功于 Google Gears。然而真正的离线 Web 要靠 HTML 5,这个未来的 Web 语言明星将为  Web 的离线存储制定一套标准,W3C已经发布 HTML5 离线存储细则。 有人可能会说,离线 Web 毫无意义,你得...
标签: Web开发
复制代码代码如下: !DOCTYPE HTML html head meta charset="UTF-8" titleHTML5示例/title style type="text/css" #container{border:1px solid #ccc;width:800px;height:600px;position:relative;} canvas{position:absolute;top:0px;left:0px;z-index:1;} /style /head body select id="tools" option value="pen"铅笔/option op...
标签: Web开发
HTML5 是近十年来 Web 标准最巨大的飞跃。和以前的版本不同,HTML 5 并非仅仅用来表示 Web 内容,它的使命是将 Web 带入一个成熟的应用平台,在这个平台上,视频,音频,图象,动画,以及同电脑的交互都被标准化。尽管 HTML 5 的实现还有很长的路要走,但 HTML 5 正在改变 Web。 HTML 最近的一次升级是1999年12月发布的 HTML 4.01。自那以...
标签: Web开发
 一、基本概念 什么是Canvas canvas 是一个新的 HTML 元素,这个元素在 HTML5  中被定义。这个元素通常可以被用来在 HTML 页面中通过 JavaScript 进行绘制图形、合成图像等等操作,也可以用来做一些动画。当然,目前 HTML5 规范还在草稿阶段,正式发布也许要等到2010年,不...
标签: Web开发
随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的选择。然而,每一款手机有不同的分辨率,不同屏幕大小,如何使我们开发出来的应用或页面大小能适合各种高端手机使用呢?学习html5 viewport的使用能帮你做到这一点 viewport 语法介绍: 代码如下: !-- html docu...

经验教程

920

收藏

19
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部