【问题标题】:Saving DOM Element into localStorage将 DOM 元素保存到 localStorage
【发布时间】:2021-05-17 05:54:48
【问题描述】:

我正在尝试将一个包含 HTML 元素的变量保存到 localStorage 中,这样我可以随时(从 localStorage)再次调用该变量。

我正在chrome扩展的后台和内容脚本中执行javascript

所以我创建了变量并使用要保存的 HTML 元素加载它:

var btnelm = document.getElementById("ELM_ID");

然后我尝试将该变量保存到 localStorage(希望以后能够使用该变量)

localStorage["btnelm"] = btnelm;

但是当我调用 localStorage 时,我需要它在我的变量中包含 html 元素

localStorage["btnelm"]

我得到了这个字符串文本(而不是我的 btnelm 变量中的实际 html 元素:

[object HTMLInputElement]

这当然意味着,当我将 localStorage["btnelm"] 视为包含我的 html 元素的变量时,它不起作用:

localStorage["btnelm"].innerHTML 返回undefined

我知道 localStorage 只存储 string 值,所以我有什么选择可以存储我的 btnelm 并且当被调用时,能够像我第一次创建时一样对待它(例如,使用 .childern 访问它)

提前致谢

【问题讨论】:

  • 你不能在 storage 中存储 DOM 元素。你可以在那里存储btnelm.innerHTML
  • @wOxxOm 所以我试图实现的场景是不可能的?甚至使用 localStorage 之外的任何其他方法
  • 为什么下次需要时不再次查询 DOM?您可以将它放在一个变量中并访问它,直到页面刷新,然后在超出范围时再次获取它。您不应该在 UI 上下文之外处理 DOM。

标签: javascript google-chrome-extension local-storage


【解决方案1】:

你不能保存 DOM 元素本身...但是你可以保存它的outerHTML

<div id="ELM_ID">My Div</div>

var btnelm = document.getElementById("ELM_ID").outerHTML;  // <== here

localStorage["btnelm"] = btnelm;
console.log(localStorage["btnelm"]);

输出是:

"<div id='ELM_ID'>My Div</div>"

编辑

要使用检索到的外层HTML...并按原样查找其属性是一个真正的DOM元素,只需使用.createElement()方法“重新创建”它...

let tempElement = document.createElement("div")
tempElement.innerHTML = localStorage["btnelm"]
console.log(tempElement.children[0].innerText) // Will output "My Div"

【讨论】:

  • 这只会将outerHTML文本保存到localStorage中,当调用localStorage["btnelm"].innerText时,它会返回undefined,这不是我想要的
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 2017-11-03
  • 2013-11-22
相关资源
最近更新 更多