本篇主要是透過線上課程:udemy
、w3school
及網路上搜尋資源所學習的。
localstorage localstorage
是瀏覽器裡面的資料庫,比如說瀏覽商城的時候,會有欄位顯示瀏覽過的商品,這就是透過 localstorage 的方式紀錄下來的。要注意到,localstorgae 儲存資料的方式是以string
的方式,也就是字串
。 在 chrome 瀏覽器可以透過application
中去查詢localstorage
下面會介紹幾個操控 localstorage 的方式。
setItem & getItem 等同字面上的意思,設定項目
1 2 3 4 5 var str = "John" ;localstorage.setItem("myName" , str); console .log(localstorage.getItem("myName" ));
透過 chrome 瀏覽器觀察
進一步設計點擊後儲存資料,與點擊後出叫名字的方式。
1 2 3 4 <h2 > 請輸入你的姓名</h2 > <input type ="text" class ="textClass" /> <input type ="button" class ="btnClass" value ="點擊" /> <input type ="button" class ="btnCall" value ="點擊呼叫名字" />
1 2 3 4 5 6 7 8 9 10 11 12 13 var btn = document .querySelector(".btnClass" );function saveName (e ) { var str = document .querySelector(".textClass" ).value; localStorage.setItem("myName" , str); } btn.addEventListener("click" , saveName); var call = document .querySelector(".btnCall" );function callName (e ) { var str = localStorage.getItem("myName" ); alert(str); } call.addEventListener("click" , callName);
透過 chrome 瀏覽器觀察
資料轉換 前面提到localstorage
只會保存string
的資料,所以這邊要學習字串與陣列的資料轉換。
JSON.stringify()
: 轉為 JSON 格式的字串
JSON.parse()
: 從 JSON 格式的字串轉為原本的資料內容與型別
會用在要儲存一個陣列裡面有多筆資料的時候,(JSON 格式)。 下面例子則為將陣列中的農夫名稱轉為字串後,儲存進去 localstorgae,再把字串轉回原本型別後取出。
1 2 3 4 5 6 7 8 9 10 11 var county = [{ farmer : "約翰" }];var countyString = JSON .stringify(county);console .log(countyString);localStorage.setItem("countyItem" , countyString); var getData = localStorage.getItem("countyItem" );console .log(getData);var getDataArray = JSON .parse(getData);console .log(getDataArray[0 ].farmer);
dataset - 抓取自訂資料 在 html 中,某些情況下會有自訂的屬性,以下面的例子來說data-num="1"
, data-dog="3"
就是自訂的屬性。
1 2 3 <ul class ="list" > <li data-num ="1" data-dog ="3" class ="listli" > 約翰</li > </ul >
自訂的屬性還是可以透過 javascript 來獲取資訊。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 var dataSet = document .querySelector(".listli" ).dataset;console .log(dataSet); var dataSetDetail1 = document .querySelector(".listli" ).dataset.num;console .log(dataSetDetail1); var dataSetDetail2 = document .querySelector(".listli" ).dataset.dog;console .log(dataSetDetail2); var listLi = document .querySelector(".listli" );function checkList (e ) { var num = e.target.dataset.num; var dog = e.target.dataset.dog; console .log("第" + num + "個人" ); console .log("有" + dog + "隻狗" ); } listLi.addEventListener("click" , checkList, false );
dataset & array 運用 原本的 html 沒有自訂屬性,但想要透過 js 動態加入。 下面的例子是,點擊哪個農夫後,會 alert 是選擇到哪一個農夫。
要注意到用 innerHTML 新增 html 元素或是 splice 去刪除後,都需要去執行資料更新。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 var county = [ { farmer: "卡斯伯" }, { farmer: "查理" }, { farmer: "哈維" } ]; var list = document .querySelector(".list" );function updateList ( ) { var str = "" ; var len = county.length; for (var i = 0 ; len > i; i++) { str += "<li data-num=" + i + ">" + county[i].farmer + "</li>" ; } list.innerHTML = str; } updateList(); function checkList (e ) { var num = e.target.dataset.num; if (e.target.nodeName !== "LI" ) { return ; } county.splice(num, 1 ); updateList(); } list.addEventListener("click" , checkList, false );