HTML5本地存儲之Web Storage篇

Web Storage是HTML5引入的一個很是重要的功能,在前端開發中常常用到,能夠在客戶端本地存儲數據,相似HTML4的cookie,但可實現功能要比cookie強大的多, cookie大小被限制在4KB Web Storage官方建議爲每一個網站5MB 。Web Storage又分爲兩種:
  •  sessionStorage
  •  localStorage

從字面意思就能夠很清楚的看出來,sessionStorage將數據保存在session中,瀏覽器關閉也就沒了;而localStorage則一直將數據保存在客戶端本地,除非主動刪除數據,不然數據是永遠不會過時的;無論是sessionStorage,仍是localStorage,可以使用的API都相同,經常使用的有以下幾個方法: javascript

  1.  保存數據:localStorage.setItem( key, value );      sessionStorage.setItem( key, value );
  2.  讀取數據:localStorage.getItem( key );     sessionStorage.getItem( key );  
  3.  刪除單個數據:localStorage.removeItem( key );     sessionStorage.removeItem( key );
  4.  刪除全部數據:localStorage.clear( );     sessionStorage.clear( );
  5.  獲得某個索引的key:localStorage.key( index );     sessionStorage.key( index );

兩個都有屬性 length 表示key 的個數,也即 key 長度:
var keyLength1 = localStorage.length;  var keyLength2  = sessionStorage.lengthhtml

如上,key 和 value 都必須爲字符串,換言之,web Storage的API只能操做字符串。 前端

web storage的瀏覽器支持狀況的判斷: java

在使用web storage時首先判斷是否支持該功能,有些版本瀏覽器不支持(如IE7及以前的版本不支持),只有支持才能夠使用,判斷方法以下: web

[javascript]  view plain  copy
  1. if(window.localStorage){  //或者 window.sessionStorage     
  2.     alert("瀏覽支持localStorage")   
  3. }else{      
  4.     alert("瀏覽暫不支持localStorage")   
  5. }   
  6.   
  7. //或者   
  8. if(typeof window.localStorage == 'undefined') {  //或者 window.sessionStorage   
  9.     alert("瀏覽暫不支持localStorage")   
  10. }  

接下來,咱們 經過Web Storage開發一個簡單的通信錄小程序,以演示相關API的使用方法 ;咱們要實現以下功能:

1,錄入聯繫人,聯繫人有姓名、手機號碼2個字段,以手機號做爲key存入localStorage;
2,根據手機號碼,查找機主;
3,列出當前已保存的全部聯繫人信息; 小程序

首先,準備一個簡單的HTML頁面,以下: 瀏覽器

[html]  view plain  copy
  1. <!DOCTYPE HTML>    
  2. <html>    
  3. <head>    
  4.     <meta charset="utf-8"/>    
  5.     <title>HTML5本地存儲之Web Storage篇</title>    
  6. </head>    
  7. <body>    
  8.     <div style="border: 2px dashed #ccc;width:320px;text-align:center;">       
  9.         <label for="user_name">姓名:</label>    
  10.         <input type="text" id="user_name" name="user_name" class="text"/>    
  11.         <br/>    
  12.         <label for="mobilephone">手機:</label>    
  13.         <input type="text" id="mobilephone" name="mobilephone"/>    
  14.         <br/>    
  15.         <input type="button" onclick="save()" value="新增記錄"/>    
  16.         <hr/>    
  17.         <label for="search_phone">輸入手機號:</label>    
  18.         <input type="text" id="search_phone" name="search_phone"/>    
  19.         <input type="button" onclick="find()" value="查找機主"/>    
  20.         <p id="find_result"><br/></p>    
  21.     </div>    
  22.     <br/>    
  23.     <div id="list">    
  24.     </div>    
  25. </body>    
  26. </html>  
要實現聯繫人的保存,只須要簡單實現以下JS方法便可:
[javascript]  view plain  copy
  1. //保存數據    
  2. function save(){    
  3.     var mobilephone = document.getElementById("mobilephone").value;    
  4.     var user_name = document.getElementById("user_name").value;    
  5.     if(window.localStorage){   
  6.          localStorage.setItem(mobilephone,user_name);    
  7.     }else{  
  8.          alert("瀏覽器還不支持 web storage 功能");  
  9.     }  
  10. }  

要實現查找機主,則實現以下JS方法: cookie

[javascript]  view plain  copy
  1. //查找數據    
  2. function find(){    
  3.     var search_phone = document.getElementById("search_phone").value;    
  4.     var name = "";  
  5.     if(window.localStorage){   
  6.          localStorage.getItem(search_phone);    
  7.     }else{  
  8.         alert("瀏覽器還不支持 web storage 功能");  
  9.     return//採用其餘處理方式   
  10.     }  
  11.     var find_result = document.getElementById("find_result");    
  12.     find_result.innerHTML = search_phone + "的機主是:" + name;    
  13. }   
要展示全部已保存的聯繫人信息,則須要使用localStorage.key(index)方法,以下:
[javascript]  view plain  copy
  1. //將全部存儲在localStorage中的對象提取出來,並展示到界面上    
  2. function loadAll(){    
  3.     var list = document.getElementById("list");    
  4.     if( !window.localStorage ){           
  5.         alert("瀏覽器還不支持 web storage 功能");  
  6.     return//可進行其餘處理  
  7.     }  
  8.     if(localStorage.length>0){    
  9.         var result = "<table border='1'>";    
  10.         result += "<tr><td>姓名</td><td>手機號碼</td></tr>";    
  11.         for(var i=0;i<localStorage.length;i++){    
  12.             var mobilephone = localStorage.key(i);    
  13.             var name = localStorage.getItem(mobilephone);    
  14.             result += "<tr><td>"+name+"</td><td>"+mobilephone+"</td></tr>";    
  15.         }    
  16.         result += "</table>";    
  17.         list.innerHTML = result;    
  18.     }else{    
  19.         list.innerHTML = "目前數據爲空,趕忙開始加入聯繫人吧";    
  20.     }    
  21. }   

問題:如上的演示,都只有2個字段,姓名和手機號碼,若是要存入更爲豐富的聯繫人信息,好比公司名稱、家庭地址等,如何實現呢?Web Storage不是隻能處理字符串嗎?此時,能夠利用JSON的stringify()方法,將複雜對象轉變成字符串,存入Web Storage中;當從Web Storage中讀取時,能夠經過JSON的parse()方法再轉換成JSON對象;

以下簡單演示增長了公司屬性的聯繫人保存JS代碼: session

[javascript]  view plain  copy
  1. //保存數據    
  2. function save(){    
  3.     var contact = new Object;    
  4.     contact.user_name = document.getElementById("user_name").value;    
  5.     contact.mobilephone = document.getElementById("mobilephone").value;    
  6.     contact.company = document.getElementById("company").value;    
  7.     var str = JSON.stringify(contact);  //須要引用相關的JSON包  
  8.     if(window.localStorage){   
  9.         localStorage.setItem(contact.mobilephone,str);    
  10.     }else{  
  11.         alert("瀏覽器還不支持 web storage 功能");  
  12.     return//採用其餘處理方式   
  13.     }  
  14.     loadAll();    
  15. }    
  16.   
  17. //將全部存儲在localStorage中的對象提取出來,並展示到界面上    
  18. function loadAll(){    
  19.     var list = document.getElementById("list");    
  20.     if( !window.localStorage ){           
  21.         alert("瀏覽器還不支持 web storage 功能");  
  22.     return//可進行其餘處理  
  23.     }  
  24.     if(localStorage.length>0){    
  25.         var result = "<table border='1'>";    
  26.         result += "<tr><td>姓名</td><td>手機</td><td>公司</td></tr>";    
  27.         for(var i=0;i<localStorage.length;i++){    
  28.             var mobilephone = localStorage.key(i);    
  29.             var str = localStorage.getItem(mobilephone);    
  30.             var contact = JSON.parse(str);    
  31.             result += "<tr><td>"+contact.user_name+"</td><td>"+contact.mobilephone+"</td><td>"+contact.company+"</td></tr>";    
  32.         }    
  33.         result += "</table>";    
  34.         list.innerHTML = result;    
  35.     }else{    
  36.         list.innerHTML = "目前數據爲空,趕忙開始加入聯繫人吧";    
  37.     }    
  38. }  
相關文章
相關標籤/搜索