日韩欧美人妻无码精品白浆,夜夜嗨AV免费入口,国产欧美官网在线看,高校回应聋哑女生因长相完美被质疑

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

JavaScript 21天入門:數(shù)據(jù)處理本地存儲

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

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

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

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

?

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

數(shù)據(jù)的操作

在引入存儲之后,任務(wù)就變成了要保存的數(shù)據(jù)。

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

而刪除任務(wù)操作則會刪除數(shù)據(jù)。

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

它們發(fā)生的時間點分別在點擊創(chuàng)建、任務(wù)列表加載和點擊刪除按鈕。

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

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

  • saveTasks:把任務(wù)數(shù)據(jù)保存到本地存儲里。

  • loadTasks: 從本地存儲里讀取任務(wù)數(shù)據(jù) 。

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

保存數(shù)據(jù)

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)); } 

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

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

 function addTaskToDOM(taskText, completed = false) {   // 1. 創(chuàng)建新的任務(wù)項   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);    // 將新任務(wù)項添加到任務(wù)列表中   taskList.appendChild(newTask);    // 清空輸入框   taskInput.value = ''; } 

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

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

原來的 addTask 方法則重構(gòu)成上面這個樣子。

讀取數(shù)據(jù)

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

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

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

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

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

讀取數(shù)據(jù),需要發(fā)生在頁面加載的時候,只需要監(jiān)聽DOMContentLoaded事件。

document.addEventListener('DOMContentLoaded', loadTasks); 

總結(jié)

完整代碼如下:

// 獲取DOM元素 const taskList = document.getElementById('task-list'); const taskInput = document.getElementById('task-input'); const addTaskBtn = document.getElementById('add-task-btn');  // 從localStorage加載任務(wù) 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)); }  // 添加任務(wù)函數(shù) function addTask() {   const taskText = taskInput.value;   if (taskText === '') {     alert('任務(wù)不能為空');     return;   }   addTaskToDOM(taskText);   saveTasks(); }  function addTaskToDOM(taskText, completed = false) {   // 1. 創(chuàng)建新的任務(wù)項   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);    // 將新任務(wù)項添加到任務(wù)列表中   taskList.appendChild(newTask);    // 清空輸入框   taskInput.value = ''; }  // 綁定事件監(jiān)聽器 addTaskBtn.addEventListener('click', addTask);  

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


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