Coding 101

Coding101 Day5 搭配localStorage 實作Todo List練習

javaScript搭配localStorage 實作Todo List練習

// -------- 指定 dom -------- //
var list = document.querySelector('.list');
var sendData = document.querySelector('.send');
// 取出 localstorage裡的資料,有就取值,沒就塞空陣列
var data = JSON.parse(localStorage.getItem('listData')) || [];



// --------  監聽和更新 -------- //
// 監聽btn 送出 todo
sendData.addEventListener('click',addData);
// 刪除 todo
list.addEventListener('click',toggleDone);
// 更新列表
updateList(data);



// -------- 加入列表 -------- //
function addData(e) {
  e.preventDefault();
  
  var txt = document.querySelector('.text').value;
  // 新增 todo的 object
    // content 是 localStorage object裡的 key
    // txt 是 localStorage object裡的 value
  var todo = {
    content: txt
  };
  data.push(todo);
  // 更新網頁內容
  updateList(data);
  // 更新localstorage,要存入要轉成string
  localStorage.setItem('listData', JSON.stringify(data));
}




// --------  更新列表 -------- //
function updateList(items) {
  // 定義 str暫存todo的項目
  var str = "";
  len = items.length;
  // updateList(items)的 items是指 localStorage的 object項目
  // 用for跑出所有的待辦item
  for(var i = 0; i < len; i++) {
    str += '<li><a href="#" data-index=' + i + '>刪除</a><span>'+ items[i].content+ '</span></li>'
  };
  // 存回頁面更新html
  list.innerHTML = str;
}


// --------  刪除列表 -------- //
function toggleDone(e) {
  e.preventDefault();
  // 確認點擊的是否為a元素,否則跳出
  if(e.target.tagName !== 'A') { return };
  // 確認點擊的a元素 index
  var index = e.target.dataset.index;
  // 刪除data
  data.splice(index,1);
  // 將data存回localStorage
  localStorage.setItem('listData',JSON.stringify(data));
  // 更新頁面的list
  updateList(data);
}

在html裡輸入以下元素

<div class="wrap clearfix">

  <div class="content">
        <div class="addList">
          <input type="text" class="text"  placeholder="請填寫代辦內容" required >
          <input type="button" class="send" value="加入代辦">
        </div>
        <ul class="list"></ul>
        
  </div>
</div>

 

© 2024 胡同筆記 | WordPress Theme: Cosimo by CrestaProject.