javascript - 通过 HTML 标签获取对象并从本地存储中删除
问题描述
这是我关于stackoverflow的第一个问题。和一点代码经验。
所以我有一个这样的本地存储:
myDB: "[{"key:"123","label":"abc"}]
我有一个以“abc”为值的 div:
<div id="name">abc</div>
并且许多 id 的 div 克隆具有不同的值
<div id="name">abc</div>
<div id="name">cde</div>
<div id="name">efg</div>
我想读取ID“name”的值,在localstorage中创建一个if/else,就像看“abc”一样,如果是的话,用密钥删除它。否则不删除。
我正在考虑使用 document.getElement 从 ID 中获取值并将其与 localstorage 进行比较,并使用 if else 来做那件事。但是有很多克隆都有那个事件来触发删除它的功能。因此该函数不知道要比较哪个 ID 的值并将其删除。
对于这个新手问题,我真的很尴尬。但我不得不问,首先非常感谢:)
*新问题:
我想删除本地存储的最后一个元素。我可以将 localstorage 转换为数组,然后使用 array.pop()。然后将改变后的数组再次转换为localstorage?
解决方案
首先,正如其他人提到的,id
必须是唯一的。您可以改用任何其他属性,例如class
:
<div class="name">abc</div>
<div class="name">def</div>
<div class="name">ghi</div>
<div class="name">jkl</div>
<div class="other">mno</div>
然后,要查询这些元素,您可以使用document.getElementsByClassName("name")
which 将返回一个类似数组的对象。您可以使用扩展语法和map方法的组合将此对象转换为值数组:
let values = [...document.getElementsByClassName("name")].map(e => e.innerHTML);
要使用本地存储,您可以使用localStorage.setItem
和localStorage.getItem
. 如您所知,本地存储仅存储字符串,因此JSON.parse
和JSON.stringify
方法也会有所帮助。
这是代码示例:
localStorage.setItem("myDB", '[{"key":"123","label":"abc"}, {"key":"456","label":"mno"}]');
console.log('Local storage before: ', localStorage.getItem("myDB"));
// extracting div values to an array
let values = [...document.getElementsByClassName("name")].map(e => e.innerHTML);
// creating a js object from myDB string
let db = JSON.parse(localStorage.getItem("myDB"));
// leaving only those elements, which labels are not in the values array
localStorage.setItem("myDB", JSON.stringify(db.filter(item => !values.includes(item.label))));
console.log('Local storage after: ', localStorage.getItem("myDB"));
JSFiddle 链接:https ://jsfiddle.net/v03wpgq1/4/
推荐阅读
- python - 尝试在用户登录系统时添加所有登录信息
- php - 出乎意料的结果,我在行 [2] 中始终获得 0。为什么?
- python - 我可以使用 Instagram API 获取其他用户的简历吗?
- javascript - 反应如何在状态更改时更改 div 名称
- assembly - 我的乘法和加法代码不会产生正确的结果
- delphi - 必须在第一行调用继承?
- flutter - 如何在搜索结果页面后添加特定的文字和图片?
- point-cloud-library - 沿 z 轴旋转点云
- jquery - Jquery Ajax 使用 POST 将数据发送到端点
- python - 使用扩展选择参数自动化 Jenkins 作业