JS sessionStorage 存储 HTML 节点,稍后再使用它
JS sessionStorage to store HTML node and then re-use it later
我需要克隆一些 HTML 内容,将其存储在 sessionStorage 中,然后将存储的 HTML 重新部署回另一个页面上的 DOM。目前,我的测试只是在一个页面上完成所有操作,并通过页面刷新调用 sessionStorage。
所以,这是我到目前为止的想法。
var exp561CardFour = document.getElementById('dashboard_item_four');
var clnCardFour = exp561CardFour.cloneNode(true);
sessionStorage.setItem('storedCardFour', clnCardFour);
当我用控制台中的这段代码去获取 HTML 时...
var grabCardFour = sessionStorage.getItem('storedCardFour');
...我最终得到这个:
请帮忙:)
编辑:
仅供参考 clnCardFour 只包含一些 HTML 并且工作正常
在控制台中使用 Parking Masters 建议进行编辑:
存储 API (sessionStorage/localStorage) 仅存储字符串。当你打电话时:
sessionStorage.setItem('storedCardFour', clnCardFour);
API 对对象 clnCardFour
使用 .toString()
方法 - returns [object HTMLLIElement]
.
因此您需要该节点的字符串表示形式。您可以通过像这样获取节点的 OuterHTML 来实现:
sessionStorage.setItem('storedCardFour', clnCardFour.outerHTML);
当您需要恢复该节点时,只需使用父节点的 .innerHTML
属性 将其放回 DOM。
let div = document.querySelector('div');
let exp561CardFour = document.getElementById('dashboard_item_four');
sessionStorage.setItem('storedCardFour', exp561CardFour.outerHTML);
let clonedFromStorage = sessionStorage.getItem('storedCardFour');
div.innerHTML += clonedFromStorage
<div>
<i id="dashboard_item_four">Hello there!</i>
</div>
这里是 JS Bin Example
HTMLIElement
是一个 <i>
元素,您正在将整个元素对象存储在存储器中。
可以使用JSON
(JavaScript Object Notation) .stringify({})
将元素字符串化,然后再次解析得到元素.
这是一个例子:
var myEl = document.getElementById("my-el");
alert("This will not print the object: " + myEl);
alert("This will print the object: " + JSON.stringify(myEl));
<i id="my-el"></i>
溢出的对象没有被字符串化,因为对象太长了。
与jQuery:
var myEl = $("my-el");
alert("This will not print the jQuery object: " + myEl);
alert("This will print the jQuery object: " + JSON.stringify(myEl));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<i id="my-el"></i>
更多关于 JSON.stringify
and JSON.parse
在 MDN。
(请注意您在 sessionStorage
中存储的内容,一次最多只能存储 2kB)。
现在使用JSON.parse
获取解析对象:
var myObj = "{}";
myObj; // "{}"
JSON.parse(myObj); // Object { ... }
我整理了所有内容的实例:
var exp561CardFour = document.getElementById('dashboard_item_four');
var clnCardFour = exp561CardFour.cloneNode(true);
sessionStorage.setItem('storedCardFour', JSON.stringify(clnCardFour));
// When in an <iframe>, it'll say The operation is insecure."
var grabCardFour = JSON.parse(sessionStorage.getItem('storedCardFour'));
<i id="dashboard_item_four"><i>
代码片段来自 stacksnippets.net,由于 iframe 安全问题将无法运行。
但是,请在您的本地服务器/文件上尝试,祝您好运。
我需要克隆一些 HTML 内容,将其存储在 sessionStorage 中,然后将存储的 HTML 重新部署回另一个页面上的 DOM。目前,我的测试只是在一个页面上完成所有操作,并通过页面刷新调用 sessionStorage。
所以,这是我到目前为止的想法。
var exp561CardFour = document.getElementById('dashboard_item_four');
var clnCardFour = exp561CardFour.cloneNode(true);
sessionStorage.setItem('storedCardFour', clnCardFour);
当我用控制台中的这段代码去获取 HTML 时...
var grabCardFour = sessionStorage.getItem('storedCardFour');
...我最终得到这个:
请帮忙:)
编辑: 仅供参考 clnCardFour 只包含一些 HTML 并且工作正常
在控制台中使用 Parking Masters 建议进行编辑:
存储 API (sessionStorage/localStorage) 仅存储字符串。当你打电话时:
sessionStorage.setItem('storedCardFour', clnCardFour);
API 对对象 clnCardFour
使用 .toString()
方法 - returns [object HTMLLIElement]
.
因此您需要该节点的字符串表示形式。您可以通过像这样获取节点的 OuterHTML 来实现:
sessionStorage.setItem('storedCardFour', clnCardFour.outerHTML);
当您需要恢复该节点时,只需使用父节点的 .innerHTML
属性 将其放回 DOM。
let div = document.querySelector('div');
let exp561CardFour = document.getElementById('dashboard_item_four');
sessionStorage.setItem('storedCardFour', exp561CardFour.outerHTML);
let clonedFromStorage = sessionStorage.getItem('storedCardFour');
div.innerHTML += clonedFromStorage
<div>
<i id="dashboard_item_four">Hello there!</i>
</div>
这里是 JS Bin Example
HTMLIElement
是一个 <i>
元素,您正在将整个元素对象存储在存储器中。
可以使用JSON
(JavaScript Object Notation) .stringify({})
将元素字符串化,然后再次解析得到元素.
这是一个例子:
var myEl = document.getElementById("my-el");
alert("This will not print the object: " + myEl);
alert("This will print the object: " + JSON.stringify(myEl));
<i id="my-el"></i>
溢出的对象没有被字符串化,因为对象太长了。
与jQuery:
var myEl = $("my-el");
alert("This will not print the jQuery object: " + myEl);
alert("This will print the jQuery object: " + JSON.stringify(myEl));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<i id="my-el"></i>
更多关于 JSON.stringify
and JSON.parse
在 MDN。
(请注意您在 sessionStorage
中存储的内容,一次最多只能存储 2kB)。
现在使用JSON.parse
获取解析对象:
var myObj = "{}";
myObj; // "{}"
JSON.parse(myObj); // Object { ... }
我整理了所有内容的实例:
var exp561CardFour = document.getElementById('dashboard_item_four');
var clnCardFour = exp561CardFour.cloneNode(true);
sessionStorage.setItem('storedCardFour', JSON.stringify(clnCardFour));
// When in an <iframe>, it'll say The operation is insecure."
var grabCardFour = JSON.parse(sessionStorage.getItem('storedCardFour'));
<i id="dashboard_item_four"><i>
代码片段来自 stacksnippets.net,由于 iframe 安全问题将无法运行。
但是,请在您的本地服务器/文件上尝试,祝您好运。