欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

JavaScript 21天入門:數據處理本地存儲

admin
2024年11月1日 22:10 本文熱度 583

昨天完成了基本功能,但是大家注意刷新之后,內容都沒有了。

今天我們就來解決這個刷新之后內容消失的問題。

而解決這個問題的方案,就是使用本地存儲。

?

在使用了本地存儲之后,注意在刷新操作下,內容依然還顯示在頁面上。

數據的操作

在引入存儲之后,任務就變成了要保存的數據。

保存的數據又要拿來使用,就會有獲取數據的操作。

而刪除任務操作則會刪除數據。

總結下來,在這個項目里,數據需要處理三種操作:保存(添加)、讀取和刪除。

它們發生的時間點分別在點擊創建、任務列表加載和點擊刪除按鈕。

為了代碼的易讀和維護,我們對原來的addTask函數做一個調整,先從中抽出一個函數addTaskToDOM,用于處理把任務添加到列表元素里。

同時添加以下兩個函數處理數據的保存和獲取:

  • saveTasks:把任務數據保存到本地存儲里。

  • loadTasks: 從本地存儲里讀取任務數據 。

至于刪除,大家要注意,它是在動態生成的 DOM 元素里的按鈕,這一部分的邏輯代碼在 addTaskToDOM里。

保存數據

function saveTasks() {   const tasks = [];   document.querySelectorAll('.task').forEach((task) => {     tasks.push({       text: task.firstChild.textContent,       completed: task.classList.contains('completed'),     });   });   localStorage.setItem('tasks', JSON.stringify(tasks)); } 

定義任務列表為數組,通過querySelectorAll讀取所有 CSS 類為.task 的元素,所以把數據 push 到數組。

最后通過JSON.stringify()方法,把數組轉成 JSON 格式的字符串,存儲到本地存儲,存儲 key 為 tasks。

 function addTaskToDOM(taskText, completed = false) {   // 1. 創建新的任務項   const newTask = document.createElement('li');   newTask.className = 'task';   if (completed) {     newTask.classList.add('completed');   }   newTask.textContent = taskText;    // 2. 添加完成按鈕   const completeBtn = document.createElement('button');   completeBtn.textContent = '完成';   completeBtn.className = 'complete-btn';   completeBtn.addEventListener('click', () => {     newTask.classList.toggle('completed');     saveTasks();   });    // 3. 添加刪除按鈕   const deleteBtn = document.createElement('button');   deleteBtn.textContent = '刪除';   deleteBtn.className = 'delete-btn';   deleteBtn.addEventListener('click', () => {     taskList.removeChild(newTask);     saveTasks();   });    newTask.appendChild(completeBtn);   newTask.appendChild(deleteBtn);    // 將新任務項添加到任務列表中   taskList.appendChild(newTask);    // 清空輸入框   taskInput.value = ''; } 

大家注意這一段抽出來的代碼和之前不同之處,在于在完成和刪除按鈕的事件里,都調用了剛才實現的saveTasks()方法。

function addTask() {   const taskText = taskInput.value;   if (taskText === '') {     alert('任務不能為空');     return;   }   addTaskToDOM(taskText);   saveTasks(); } 

原來的 addTask 方法則重構成上面這個樣子。

讀取數據

加載任務數據的方法,則比較簡單,只需要把數據從本地存儲讀取出來。

注意它是 JSON 格式的字符串,通過使用JSON.parse()方法把它轉成對象。

由于它是數組,則可以使用遍歷方法forEach()對它進行遍歷后逐個加載到 DOM 里。

此時就知道為什么要抽出方法 addTaskToDOM()了,因為這里要復用它。

function loadTasks() {   const tasks = JSON.parse(localStorage.getItem('tasks')) || [];   tasks.forEach((task) => {     addTaskToDOM(task.text, task.completed);   }); } 

讀取數據,需要發生在頁面加載的時候,只需要監聽DOMContentLoaded事件。

document.addEventListener('DOMContentLoaded', loadTasks); 

總結

完整代碼如下:

// 獲取DOM元素 const taskList = document.getElementById('task-list'); const taskInput = document.getElementById('task-input'); const addTaskBtn = document.getElementById('add-task-btn');  // 從localStorage加載任務 document.addEventListener('DOMContentLoaded', loadTasks);  function loadTasks() {   const tasks = JSON.parse(localStorage.getItem('tasks')) || [];   tasks.forEach((task) => {     addTaskToDOM(task.text, task.completed);   }); }  function saveTasks() {   const tasks = [];   document.querySelectorAll('.task').forEach((task) => {     tasks.push({       text: task.firstChild.textContent,       completed: task.classList.contains('completed'),     });   });   localStorage.setItem('tasks', JSON.stringify(tasks)); }  // 添加任務函數 function addTask() {   const taskText = taskInput.value;   if (taskText === '') {     alert('任務不能為空');     return;   }   addTaskToDOM(taskText);   saveTasks(); }  function addTaskToDOM(taskText, completed = false) {   // 1. 創建新的任務項   const newTask = document.createElement('li');   newTask.className = 'task';   if (completed) {     newTask.classList.add('completed');   }   newTask.textContent = taskText;    // 2. 添加完成按鈕   const completeBtn = document.createElement('button');   completeBtn.textContent = '完成';   completeBtn.className = 'complete-btn';   completeBtn.addEventListener('click', () => {     newTask.classList.toggle('completed');     saveTasks();   });    // 3. 添加刪除按鈕   const deleteBtn = document.createElement('button');   deleteBtn.textContent = '刪除';   deleteBtn.className = 'delete-btn';   deleteBtn.addEventListener('click', () => {     taskList.removeChild(newTask);     saveTasks();   });    newTask.appendChild(completeBtn);   newTask.appendChild(deleteBtn);    // 將新任務項添加到任務列表中   taskList.appendChild(newTask);    // 清空輸入框   taskInput.value = ''; }  // 綁定事件監聽器 addTaskBtn.addEventListener('click', addTask);  

今天是堆積代碼的一天,希望你看得快樂!


該文章在 2024/11/2 17:51:20 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved