专栏中心

EEPW首页 > 专栏 > HTML5开发之本地存储之便签Demo详解

HTML5开发之本地存储之便签Demo详解

发布人:扣丁学堂 时间:2020-07-21 来源:工程师 发布文章

在现如今,大多数程序员对HTML5WebStorageAPI能够让在本地存储数据成为了可能,而且可以存储5M的数据,这5M的空间可供一个域任意使用。注意是一个域,这也就是说所保存的数据是不可跨域访问的。比如大多人喜欢在实践中学习新的知识,今天也不例外,我利用loalStorage做了一个便签小应用,数据存放在浏览器中。下面就用这个例子的开发流程来介绍localStorage吧!  

10.png

首先,我想讲讲该怎么创建这么一个便签,它的具体过程应该像下面这样。获取用户输入的内容、获取便签的等级,这个是在<select>中选择的。将内容和等级保存在一个对象中,利用JSON转换为字符串。生成一个key,用于保存数据,为了查找方便,创建一个数组,单独来存储key,当然这个数组也利用JSON转换成字符串。使用localStorage的setItem()方法保存便签对象和key数组字符串,将标签添加到DOM结构。  

按照上述流程,可以编写下面的代码:  

functioncreateNote(){  

varnoteElement=document.getElementById("note");  

varnoteValue=noteElement.value;  

noteElement.value="";  

varlevelObj=document.getElementById("note-level");  

varindex=levelObj.selectedIndex;  

varlevel=levelObj[index].value;  

varnoteObj={  

"value":noteValue,  

"level":level  

}  

vardate=newDate();  

varkey="note_"+date.getTime();  

localStorage.setItem(key,JSON.stringify(noteObj));  

varnotesArray=getNotesArray();  

notesArray.push(key);  

localStorage.setItem("notesArray",JSON.stringify(notesArray));  

addNoteToDOM(key,noteObj);  

}  

值得注意的是,localStorage只能保存字符串的值,所以我们在这里才不得不使用JSON将其转换成字符串。你可以使用下属代码存储一个整数或者浮点数。  

localStorage.setItem("my_num",10);  

这行代码确实可以运行,那是因为JS自动将其转换成了字符串,所以如果你想取出一个整数,你不得不进行转换,就像下面这样。  

varnum=parseInt(localStorage.getItem("my_num"));  

上面的代码中,使用了两个自定义的函数,那就是getNotesArray()和addNoteToDOM(),根据名字可以很容易判断出它们的功能。不过让人费解的是,我们为什么要专门使用一个数组去保存key呢?  

有一点你需要知道,在实际的网站中,你不可能只存储便签吧?你还需要存储很多其它的数据,如果保存了大量的其它数据,那么寻找便签就是一项十分耗时的任务了。我为什么要寻找便签?  

如果你的用户关掉了浏览器,然后又重新打开了这个网站怎么办呢?这个时候我们就不得不去寻找便签了。好了,下面来看看getNotesArray()函数吧。  

functiongetNotesArray(){  

varnotesArray=localStorage.getItem("notesArray");  

if(!notesArray){  

notesArray=[];  

localStorage.setItem("notesArray",JSON.stringify(notesArray));  

}else{  

notesArray=JSON.parse(notesArray);  

}  

returnnotesArray;  

}  

利用localStorage.getItem()去获取这个数组,如果这个数组不存在就创建一个,然后将其转换成字符串保存起来,如果数组已经存在,那就将其从字符串转成数组。总之,要返回一个数组,供我们使用。  

好了,大概已经知道了,下面就是addNoteToDOM()函数了,这个函数就更简单啦,下面来看看。  

functionaddNoteToDOM(key,noteObj){  

varnotes=document.getElementById("note-list");  

varnote=document.createElement("li");  

note.setAttribute("id",key);  

note.onclick=deleteNote;  

varvalue=noteObj.value;  

note.innerHTML=value;  

varlevel=noteObj.level;  

note.setAttribute("class",level);  

notes.appendChild(note);  

}  

首先,需要解释一点,#note-list是一个<ul>元素,而且我们的便签也都是由其子元素<li>组成的。接下来就简单了,我们将值赋给<li>,然后根据标签的等级为其添加不同的背景颜色,这里是通过为其设置class来达到这一目的。  

值得注意的是,这里我们将key作为参数传递进来了,而且利用key的值为<li>设置了id属性,这是为了达到删除的目的,毕竟我们不能只创建标签而不知道如果删除吧,所以在这里还为<li>设置了点击事件。  

functiondeleteNote(e){  

varkey=e.target.id;  

localStorage.removeItem(key);  

varnotesArray=getNotesArray();  

for(vari=0;i<notesArray.length;i++){  

if(key===notesArray[i]){  

notesArray.splice(i,1);  

}  

}  

localStorage.setItem("notesArray",JSON.stringify(notesArray));  

deleteNoteFromDOM(key);  

}  

当<li>元素被点击,就会传进来一个event对象,通过target就可以获得触发事件的对象,我们获取到这个对象的id,将其从DOM删除。  

不过这个不是重点,删除标签,意味着,我们还需要将其从本地存储中将其值删除,而且要把它从key数组中除名,我们用removeItem和splice()来大到了这一目的。  

上面,我们已经把localStorage的使用讲解完毕了,而且上面的代码包含了便签应用的核心代码。值得一提的是,还有一个sessionStorage,它的使用和localStorage完全相同,唯一不同的是,一旦浏览器窗口关闭,保存的数据将会被全部删除。  

当然,这是HTML5中的属性,所以我们在使用的时候需要进行检测,可以使用下面的代码检测浏览器是否支持localStorage。  

if(window["localStorage"]){  

//yourlogiccode  

}  


专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

webserve1.0-- Webserver for ARM7

vxworks_network_ds

资源下载 2007-03-22

服务器厂下半年迎Blackwell世代

提升约2倍散热性能!东芝推出新型SCiB™锂离子电池模块 适用于频繁高倍率充放电使用场景

2025-04-08

三家半导体公司核心技术人员发生变动

windview2

资源下载 2007-03-22

DLP Discovery 4100 入门

视频 2010-03-15

受美国关税影响:奥迪暂停向美国经销商交付汽车

汽车电子 2025-04-08

INA20x 社区视频

视频 2010-03-15

IAR 使用 [利尔达]

视频 2010-03-15

三星电子计划上调存储器价格

智启AI+新纪元,贸泽电子将亮相2025慕尼黑上海电子展

中国液冷服务器市场加速扩张,头部聚势驱动应用深化

D-Cap 控制模式的原理及应用(二)

视频 2010-03-15

windnet_ds

资源下载 2007-03-22

德国BSI发布苹果系统高危漏洞警告 涉iOS等三大系统

嵌入式系统 2025-04-08

第四代半导体,破晓时刻

EDA/PCB 2025-04-08

Qorvo 推出全新 BLDC 电机驱动器 ACT72350 —— 有效缩减方案尺寸、设计周期和 BOM 成本

visualedit

资源下载 2007-03-22

PI发布TopSwitch-JX新产品系列

更多 培训课堂
更多 焦点
更多 视频

技术专区