我刚刚开始了关于 Javascript 的 Udemy 课程,第一个项目是创建任务列表。我按照教程很好地创建了它,但我想向它添加一些功能。添加新任务时,我想添加将其标记为完成的功能。
我一直在尝试如何使用 css (text-decoration: line-through) 来做到这一点,但遇到了死胡同。一旦单击标记为“完成”的按钮,就会调用一个函数来检查“检查项”类的列表项。然后我添加类名“check-item-style”,它将直通应用于单击的列表项。如果您能帮我将其插入本地存储,并在浏览器重新打开后从本地存储中“获取”。
我会尽量保持代码尽可能简短。如果可能的话,只有香草 javascript!我尝试做一个代码片段,但效果不是很好(可能是由于本地存储不可用),所以我在下面包含了短代码。如果没有所有库,某些代码将无法正常工作,因此必须包含抱歉!
// Define UI Vars
const form = document.querySelector("#task-form");
const taskList = document.querySelector(".collection");
const taskInput = document.querySelector("#task");
//Event Listeners
form.addEventListener("submit", addTask);
taskList.addEventListener("click", checkTask);
document.addEventListener("DOMContentLoaded", getTasks);
function getTasks() {
if (localStorage.getItem("tasks") === null) {
tasks = [];
} else {
tasks = JSON.parse(localStorage.getItem("tasks"));
}
tasks.forEach(function(task) {
const li = document.createElement("li");
li.className = "collection-item";
li.appendChild(document.createTextNode(task));
const linkCheck = document.createElement("a");
linkCheck.className = "check-item secondary-content";
linkCheck.innerHTML = '<i class="fa fa-check"></i>';
li.appendChild(linkCheck);
taskList.appendChild(li);
});
}
function addTask(e) {
if (taskInput.value === "") {
alert("Add a task");
} else {
const li = document.createElement("li");
li.className = "collection-item";
li.appendChild(document.createTextNode(task));
const linkCheck = document.createElement("a");
linkCheck.className = "check-item secondary-content";
linkCheck.innerHTML = '<i class="fa fa-check"></i>';
li.appendChild(linkCheck);
taskList.appendChild(li);
storeTaskInLocalStorage(taskInput.value);
//Clear input
taskInput.value = "";
}
e.preventDefault();
}
function storeTaskInLocalStorage(task) {
let tasks;
if (localStorage.getItem("tasks") === null) {
tasks = [];
} else {
tasks = JSON.parse(localStorage.getItem("tasks"));
}
tasks.push(task);
localStorage.setItem("tasks", JSON.stringify(tasks));
}
function checkTask(e) {
let check = e.target.parentElement.parentElement;
if (e.target.parentElement.classList.contains("check-item")) {
check.className = "check-item-style";
addStylingToLocalStorage(check.className);
}
}
function addStylingToLocalStorage() {
//Please help here
}
.check-item-style {
text-decoration: line-through;
padding: 10px;
padding-right: 20px;
padding-left: 20px;
border-bottom: 1px solid rgba(0, 0, 0, 0.08);
margin: 0px;
}
<!DOCTYPE html>
<html lang="en">
<body>
<script
src="https://code.jquery.com/jquery-3.5.1.js"
integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc="
crossorigin="anonymous"
></script>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"
/>
<link
href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"
rel="stylesheet"
integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN"
crossorigin="anonymous"
/>
<title>Task List</title>
<link rel="stylesheet" href="stylesheet.css" />
<script src="app.js" defer></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"
defer
></script>
<div class="container">
<form id="task-form">
<div>
<input type="text" name="task" id="task" />
<label for="task">New Task</label>
</div>
<input type="submit" value="Add Task" class="btn" />
</form>
<div>
<ul class="collection"></ul>
</div>
</div>
</body>
</html>