簡體   English   中英

如何將創建的 div 存儲在 localStorage 中?

[英]How can i store the created div in localStorage?

我想在單擊后創建一個 div 並將創建的 div 存儲在localStorage中。

b.addEventListener('click', addDiv);

function addDiv() {
  var div = document.createElement('div');
}
    b.addEventListener('click', addDiv);
    function addDiv() {
        var div = document.createElement('div');
        div.innerHTML = "Content to be add and get from localStorage!"
        localStorage.setItem("contentDiv",div.outerHTML);
    }

To Retrieve can use like:

    function getStoaregeDate(){
         document.getElementById("elementId").innerHTML = 
        localStorage.getItem("contentDiv");
    }

我已經更新了我的答案。 請立即檢查。 希望這有幫助。 謝謝!

從以上評論...

“@AlvéMonke ...幾乎正確。OP 需要編寫一個序列化程序,描述如何創建 html 元素,例如通過編寫 JSON 可序列化數據格式。然后可以將這種格式的 JSON 字符串化值存儲到存儲中並從存儲中檢索. 然后可以將恢復/解析的數據格式發送到反序列化器(也需要編寫),該反序列化器會根據數據創建適當的 html 元素。” ——彼得·塞利格

“@PeterSeliger 你能把你的答案編碼嗎?” ——user16846263

窮人的方法雖然可靠,但將使用Element.outerHTML進行序列化(存儲)以及更高級的DOMParser.parseFromString進行反序列化(檢索/解析)。

 function putSerializedElementIntoStorage(storage, key, elmNode) { // serialization. const value = elmNode?.outerHTML ?? ''; // storage. storage.setItem(key, value); } function getParsedElementFromStorage(storage, key) { return (new DOMParser()) // deserialization ... .parseFromString( // ... from storage. storage.getItem(key) ?? '', "text/html", ) .body // parsed element. .firstElementChild; } document .querySelector('#save-element-markup') .addEventListener('click', ({ currentTarget }) => putSerializedElementIntoStorage( mock.localStorage, currentTarget.id, currentTarget, ) ); document .querySelector('#watch-stored-markup') .addEventListener('click', ({ currentTarget }) => console.log({ storedMarkup: mock .localStorage .getItem(currentTarget.dataset.storageKey), }) ); document .querySelector('#append-parsed-element') .addEventListener('click', ({ currentTarget }) => { const elmNode = getParsedElementFromStorage( mock.localStorage, currentTarget.dataset.storageKey, ); if (elmNode) { document .body .appendChild(elmNode); } });
 button { display: block; margin: 3px 10px; } button:nth-child(1) { margin: 0 15px 12px;} button:nth-child(2), button:nth-child(3) { margin: 6px 15px; } hr { position: relative; left: -25%; width: 48%; } .as-console-wrapper { left: auto!important; width: 50%; min-height: 100%; }
 <button id="save-element-markup"> <em>save</em> my markup </button> <button id="watch-stored-markup" data-storage-key="save-element-markup" > <em>watch</em> stored markup </button> <button id="append-parsed-element" data-storage-key="save-element-markup" > <em>append</em> element, parsed from saved markup </button> <hr/> <script> // mock for the SO specific stack snippet // due to the policies and environment are // not allowing an original storage access. const mock = { localStorage: (function () { // https://developer.mozilla.org/en-US/docs/Web/API/Storage // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map const storage = new Map; function key(int) { return [ ...storage.keys() ][parseInt(int, 10)]; } function setItem(key, value) { return storage.set(String(key), String(value)); } function getItem(key) { return storage.get(String(key)); } function removeItem(key) { return storage.delete(String(key)); } function clear() { return storage.clear(); } return { get length() { return storage.size; }, key, getItem, setItem, removeItem, clear, }; }()), } </script>

編輯

原因之一可能是為 DOM 元素提供了自己的與 JSON 兼容的序列化格式,其中需要為后者編寫序列化和反序列化/解析過程。

 function serializeElementNode({ nodeName = '', attributes = [], childNodes = [], }) { return { type: 'element', name: nodeName.toLowerCase(), ...( attributes.length !== 0 && { attributes: Object .values(attributes) .map(({ nodeName: key, nodeValue: value }) => ({ /*type: 'attribute', */key, value }) ) } || {} ), ...( childNodes.length !== 0 && { childNodes: [...childNodes] .map(serializeDomNode) } || {} ), }; } function serializeTextNode({ nodeValue: value = '' }) { return { type: 'text', value, }; } function serializeDomNode(node) { return ({ 1: serializeElementNode, 3: serializeTextNode, })[node?.nodeType]?.(node); } function parseElementNode({ name = 'unknown-element', attributes = [], childNodes = [], }) { const elmNode = attributes .reduce((node, { key, value }) => { node.setAttribute(key, value); return node; }, document.createElement(name)); return childNodes .reduce((rootNode, node) => { rootNode .appendChild( parseDomNode(node) ); return rootNode; }, elmNode); } function parseTextNode({ value = '' }) { return document.createTextNode(value); } function parseDomNode(node) { return ({ element: parseElementNode, text: parseTextNode, })[node?.type]?.(node); } function putSerializedElementIntoStorage(storage, key, elmNode) { // serialization. const value = JSON.stringify(serializeDomNode(elmNode)); // storage. storage.setItem(key, value); } function getParsedElementFromStorage(storage, key) { // deserialized/parsed element ... return parseDomNode( JSON.parse( // ... from storage. storage.getItem(key) ?? null ) ); } document .querySelector('#save-serialized-element') .addEventListener('click', ({ currentTarget }) => putSerializedElementIntoStorage( mock.localStorage, currentTarget.id, currentTarget, ) ); document .querySelector('#watch-serialized-element') .addEventListener('click', ({ currentTarget }) => { const serializedElementString = mock .localStorage .getItem(currentTarget.dataset.storageKey); console.log({ serializedElementString, ... ( serializedElementString && { serializedElement: JSON.parse(serializedElementString) } || {} ), }); }); document .querySelector('#append-parsed-element') .addEventListener('click', ({ currentTarget }) => { const elmNode = getParsedElementFromStorage( mock.localStorage, currentTarget.dataset.storageKey, ); if (elmNode) { document .body .appendChild(elmNode); } });
 button { display: block; margin: 3px 10px; } button:nth-child(1) { margin: 0 15px 12px;} button:nth-child(2), button:nth-child(3) { margin: 6px 15px; } hr { position: relative; left: -25%; width: 48%; } .as-console-wrapper { left: auto!important; width: 50%; min-height: 100%; }
 <button id="save-serialized-element"> <em>serialize and save</em> this element </button> <button id="watch-serialized-element" data-storage-key="save-serialized-element" > <em>watch</em> stored serialized element </button> <button id="append-parsed-element" data-storage-key="save-serialized-element" > <em>append</em> parsed node from stored serialization </button> <hr/> <script> // mock for the SO specific stack snippet // due to the policies and environment are // not allowing an original storage access. const mock = { localStorage: (function () { // https://developer.mozilla.org/en-US/docs/Web/API/Storage // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map const storage = new Map; function key(int) { return [ ...storage.keys() ][parseInt(int, 10)]; } function setItem(key, value) { return storage.set(String(key), String(value)); } function getItem(key) { return storage.get(String(key)); } function removeItem(key) { return storage.delete(String(key)); } function clear() { return storage.clear(); } return { get length() { return storage.size; }, key, getItem, setItem, removeItem, clear, }; }()), } </script>

如何儲存<div> localStorage 的元素?</div><div id="text_translate"><p> 我正在嘗試將一組項目(div)設置為本地存儲,以便頁面重新加載這些在 Ui 中顯示的元素。 function 檢查是否已經存儲了具有該名稱的數組,如果是,則本地存儲必須清除此項目,然后設置更新的數組,這些項目已添加到代碼的另一部分。 但是,當我在設置此數組后看到返回的本地存儲時,我發現一個包含空對象的數組,其長度必須相同,並且在我設置數組之前的同一個 function 中,所有項目都是正確的。 我錯過了什么?</p><pre> function setToLocalStorage(){ console.log(items); //the is array is there with all items if(..localStorage;getItem("items")){ localStorage.removeItem("items"), } localStorage.setItem("items";JSON.stringify(items));</pre><p> }</p><pre> function getDataFromLocalStorage(){ let elements=JSON.parse(localStorage.getItem('items')); console.log(elements); //I get an array with empty objects with the same length of the first</pre><p> }</p></div>

[英]How to store <div> elements to localStorage?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 使用jQuery,如何將信息存儲在動態創建的div中? 如何將.each()的結果存儲到localStorage中? 如何儲存<div> localStorage 的元素?</div><div id="text_translate"><p> 我正在嘗試將一組項目(div)設置為本地存儲,以便頁面重新加載這些在 Ui 中顯示的元素。 function 檢查是否已經存儲了具有該名稱的數組,如果是,則本地存儲必須清除此項目,然后設置更新的數組,這些項目已添加到代碼的另一部分。 但是,當我在設置此數組后看到返回的本地存儲時,我發現一個包含空對象的數組,其長度必須相同,並且在我設置數組之前的同一個 function 中,所有項目都是正確的。 我錯過了什么?</p><pre> function setToLocalStorage(){ console.log(items); //the is array is there with all items if(..localStorage;getItem("items")){ localStorage.removeItem("items"), } localStorage.setItem("items";JSON.stringify(items));</pre><p> }</p><pre> function getDataFromLocalStorage(){ let elements=JSON.parse(localStorage.getItem('items')); console.log(elements); //I get an array with empty objects with the same length of the first</pre><p> }</p></div> 如何使用偽造加密和解密pdf blob並存儲在localStorage中? 如何首次將值存儲到瀏覽器 localStorage? 如何使用`localStorage`來存儲整個頁面? 如何在一個 localStorage 鍵中存儲多個值? 有誰知道我如何將它們存儲在 localStorage 中? Javascript:如何在 LocalStorage 中存儲類的實例? 如何使用localStorage存儲用戶的頁面歷史記錄?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM