【发布时间】:2021-11-22 18:45:18
【问题描述】:
我有一个 HTML 页面如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="styles.css" type="text/css">
<title>Test</title>
</head>
<body>
<div>
<p>Hello World!</p>
</div>
</body>
</html>
然后我有一个 JS 文件,它监听 enter 键的点击,如果用户点击 enter,如果添加另一个 div。
//the event handler function
function captureEnterPress(event) {
if (event.key === "Enter" || event.keyCode === 13) {
event.preventDefault();
createNewDiv();
}
}
//creates the div
function createNewDiv() {
var body = document.body;
var div = document.createElement("div");
var p = document.createElement("p");
var labelText = document.createTextNode("Hello World!");
p.appendChild(labelText);
div.appendChile(p);
body.appendChild(div);
}
onload = () => {
document.documentElement.addEventListener("keyup", captureEnterPress);
}
我正在尝试保存 div 的数量,因此当用户重新加载页面时,它会显示与之前相同数量的 div。
我尝试了什么
我尝试将所有 div 的数组保存到 sessionStorage,如下所示:
var myStorage = window.sessionStorage;
var elementsArray = [];
//the event handler function
function captureEnterPress(event) {
if (event.key === "Enter" || event.keyCode === 13) {
event.preventDefault();
createNewDiv();
}
}
//creates the div
function createNewDiv() {
var body = document.body;
var div = document.createElement("div");
var p = document.createElement("p");
var labelText = document.createTextNode("Hello World!");
p.appendChild(labelText);
div.appendChile(p);
body.appendChild(div);
elementsArray[elementsArray.length] = div;
myStorage.setItem("storedPage", JSON.stringify(elementsArray));
}
onload = () => {
var storedPage = JSON.parse(myStorage.getItem("storedPage"));
if(storedPage){
event.preventDefault();
for(var i = 0; i < storedPage.length; i++){
document.body.appendChild(storedPage[i]);
console.log(storedPage)
}
}
document.documentElement.addEventListener("keyup", captureEnterPress);
}
我只是将它记录到控制台以查看值是什么,但它们是空的。所以我尝试存储 div.innerHTML,但是如果我尝试将其附加到文档中,我会得到错误,它是字符串而不是节点。
我没有想法,而且我对前端开发中的整个状态存储概念还很陌生,如果有人能告诉我什么是正确的做法,我将不胜感激。 谢谢!
【问题讨论】:
-
我想说不要直接将
div节点保存到存储中。存储实际的 html。 -
@navnath 请详细说明...
-
@zecuria 请阅读完整的问题,了解为什么该解决方案不适用于我的情况。
-
@BeeFriedman comment in the answer 阐明了如何使用它,即不直接调用 append 而是修改
.innerHTML
标签: javascript html session-state