這是我在github上的todo例子,你們感興趣的話能夠先去看看。git
原生js版本:https://github.com/remy-cpu/VanillaJS-Todogithub
jQuery版本:https://github.com/remy-cpu/JQuery-Todo數組
可參考例子:todoMVC 。mvc
接下來咱們會詳細地講解這些功能的實現,你們準備好了嗎?嘿嘿。dom
主要思路:咱們作添加、刪除、優先級設置等操做時,都會把這些參數(或者說狀態)保存到本地裏, 而後從新渲染頁面load( ).this
//讀取本地數據 function getData() { var data = localStorage.getItem("storeUsers"); if (data !== null) { return JSON.parse(data); } else { return []; } } //保存本地存儲數據 function saveData(data) { localStorage.setItem("storeUsers", JSON.stringify(data)); } //獲取刪除的數據 function getDeleted() { var data = localStorage.getItem("dels"); if (data !== null) { return JSON.parse(data); } else { return []; } } //保存刪除的數據 function saveDeleted(data) { localStorage.setItem("dels", JSON.stringify(data)); }
一、添加issuespa
分析:咱們在input文本框輸入issue,按下回車鍵,將這條issue存入users數組中,在通過渲染頁面,插入到頁面中。3d
//最終本地存儲數據示例 [ { name: "11",//用戶名 password: "123456",//用戶密碼 todos: [{ title: "23", //issue具體內容 completed: false, //issue完成狀況 priority: 0 //issue優先級 }] } ] //保存刪除的數據是爲咱們以後作回收站功能作準備 [ { name:"11", done:[{ title: "23", //issue具體內容 completed: false, //issue完成狀況 priority: 0 //issue優先級 }] } ]
function addItem() { //建立新的li var input = document.querySelector('.input'); input.onkeyup = function (e) { //若是文本框內容爲空,就彈出警告框,想好看點也能夠本身作一個提示框 if (input.value == '') { alert("輸入內容不能爲空"); return false; } //若是按下的是回車鍵 if (e.keyCode == 13) { //必須先登陸 if (!online) { showTips("請先登陸 !"); input.value = ''; return false; } //獲取數組 var users = getData(); //找到這是users數組中的第幾個用戶 cnt = Match(users); //找到的todos數組中第一個優先級爲0的issue var index; for (var i = 0; i < users[cnt].todos.length; i++) { if (users[cnt].todos[i].priority == 0) { index = i; break; } } //每一條issue的基本形式 var obj = { title: this.value, completed: false, priority: 0 //剛添加的issue的優先級都爲零 }; //這裏是體現同級者後來居上 //將新的issue插入到你找到的todos數組中第一個優先級爲0的issue前面 users[cnt].todos.splice(index, 0, obj); //保存數組 saveData(users); //每次都先把新的li添加到本地存儲,再連同以前的issue一塊兒渲染到頁面上 load(); //清空文本框的內容 input.value = ''; } } }
接下來會繼續更新,但願和你們多多交流!!code