javascript - 在没有 jQuery 的情况下将对象存储在数据属性中
问题描述
我的问题基本上和这个问题完全一样。我只是想知道,是否有办法在没有 jQuery 的情况下实现这一点。
以下代码不起作用。我也尝试过使用数组,但就像它存储为字符串的对象一样。有什么我做错了,还是在普通的javascript中不可能?
var div = document.getElementById("testDiv");
var obj = {name: "Test1", value: 100};
div.setAttribute("data-obj", obj);
var arr = [59, 40, 3, 2, 1, 0];
div.setAttribute("data-arr", arr);
console.log("Object-Value: "+div.dataset.obj+"; Type: "+(typeof div.dataset.obj)+"; Name: "+div.dataset.obj.name);
console.log("Array-Value: "+div.dataset.arr+"; Type: "+(typeof div.dataset.arr)+"; Third Value: "+div.dataset.arr[2]);
<div id="testDiv">This is a test.</div>
解决方案
JSON.stringify()
在将数据存储在属性中之前使用。它基本上是将数据序列化为字符串。
var div = document.getElementById("testDiv");
var obj = JSON.stringify({name: "Test1", value: 100});
div.setAttribute("data-obj", obj);
var arrayAsJSON = JSON.stringify([59, 40, 3, 2, 1, 0]);
div.setAttribute("data-arr", arrayAsJSON);
然后JSON.parse()
在获取属性值之后和呈现它之前使用。这将根据您的情况将其反序列化回 javascript 对象、数组或简单值。
推荐阅读
- ios - Firebase 通知令牌传输错误到 IOS 当前版本 Swift WebView
- node.js - PM2 与 NodeJs 崩溃然后每 1 秒重新启动一次
- database - 在 knex 迁移:上,table.foreign 未显示在终端的实际表上
- ios - 如何在同一个 ViewController Swift 5 中定义两个下拉选项
- c++ - CMake 构建错误:未定义对“deflateEnd”的引用
- sql - 查询以获取每个类别中至少出现 3 次的每个样本
- ruby-on-rails - Heroku:在推送到 Heroku 期间,无法在 MacOS 上的 Rails 6 中通过 Bundler 安装 gem
- sql - Oracle SQL - 将行显示为列 - 多对多关系
- python - 名称未定义。用ex48艰难学python
- azure - 具有公共 IP 的应用程序网关后面的 Azure 容器组