javascript - 刷新浏览器后保留 Todo 结果
问题描述
我创建了一个待办事项应用程序来添加和删除页面上的任务。
但是我想在浏览器刷新时保留待办事项结果。是否可以像将数据存储在 db 或任何存储上以保存这些结果?有什么想法可以保存数据吗?
现在我在这里发布了完整的代码!因为我以前不能在这里发布代码
let menu = document.querySelector(".bs");
let btn1 = document.querySelector(".btn");
let btn2 = document.querySelector(".btn3");
let irp = document.querySelector(".date");
let inp = document.querySelector(".input");
let bsd = document.querySelector(".sss");
let brs = document.querySelector(".marker");
let addBr = () => {
btn1.addEventListener("click", addBr);
let br = document.createElement("DIV");
let dd = document.createElement("H1");
dd.innerHTML = (inp.value);
br.className = "red";
var bn = document.createElement("H1");
bn.innerHTML = (irp.value);
menu.appendChild(br);
br.appendChild(dd);
br.appendChild(bn);
if( inp.value == "") {
br.remove();
}
else {
menu.appendChild(br);
}
if( irp.value == "") {
dd.innerHTML = "Albenis";
}
else {
menu.appendChild(br);
}
let ttt = document.createElement("BUTTON");
ttt.className = "marker";
ttt.innerHTML = "Remove";
br.appendChild(ttt);
// This is the important change. Part of creating the .ttt element
// is setting up its event listeners!
ttt.addEventListener('click', () => br.remove());
};
btn1.addEventListener("click", addBr);
// Call `addBr` once to add the initial element
addBr();
<html>
<body>
<div class="bs">
<input type="text" class="input">
<input type="date" class="date">
<button class="btn">
Add
</button>
</div>
</body>
</html>
解决方案
TL;DR:使用 localStorage 在页面加载时读取项目并在项目更改时写入项目,就像在最终版本中一样
要保留待办事项条目,您需要将其存储在数据库中。这可以是网站中的本地数据库,例如localStorage。或者您需要构建一个连接到数据库的后端并从那里发送和加载数据。
本地存储示例:
const items = [{ name: "My Todo" }, { name: "My Todo 2" }];
const setItems = () => {
localStorage.setItem("items", JSON.stringify(items));
};
const getItems = () => {
return JSON.parse(localStorage.getItem("items"));
};
包括您的代码:
const getItems = () => {
return JSON.parse(localStorage.getItem("items"));
};
const items = getItems() || [];
const setItems = () => {
localStorage.setItem("items", JSON.stringify(items));
};
let addBr = (item) => {
let br = document.createElement("DIV");
let dd = document.createElement("H1");
dd.innerHTML = (item ? item.name : inp.value);
br.className = "red";
var bn = document.createElement("H1");
bn.innerHTML = (item ? item.name : irp.value);
if (!item) {
items.push({ name: inp.value });
setItems();
}
menu.appendChild(br);
br.appendChild(dd);
br.appendChild(bn);
if( inp.value == "") {
br.remove();
}
else {
menu.appendChild(br);
}
if( irp.value == "") {
dd.innerHTML = "Albenis";
}
else {
menu.appendChild(br);
}
let ttt = document.createElement("BUTTON");
ttt.className = "marker";
ttt.innerHTML = "Remove";
br.appendChild(ttt);
// This is the important change. Part of creating the .ttt element
// is setting up its event listeners!
ttt.addEventListener('click', () => br.remove());
};
for (const item of items) {
addBr(item);
}
btn1.addEventListener("click", () => addBr());
推荐阅读
- python-3.x - 如何从 datetime.timedelta 中提取秒数
- docker - Docker 中的 IdentityServer4 + MVC 客户端
- macos - 在 MAC OS 中将音频数据从应用程序路由到虚拟音频驱动程序
- vue.js - vue-utils 在 keydown 事件后获取模型的值
- javascript - React Hooks:在钩子组件的子组件之间传递状态的最佳实践
- android - Flutter:通过调用 STF 小部件将变量从一个页面发送到另一个页面
- angular - 离子项问题
- dart - 值可以为“空”的表达式必须先进行空检查,然后才能取消引用
- swift - iOS Swift:双变量的数组分组
- python - 在 python 中声明长列表