You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jQuery为div属性赋值JS对象后如何保留对象而非转为字符串?

这个问题其实是DOM属性的本质导致的——所有DOM元素的属性值只能是字符串类型,所以当你直接把对象赋值给data-polygon属性时,JavaScript会自动调用对象的toString()方法,把它转成"[object Object]",这就是你看到的结果。给你几个靠谱的解决方案:

方案1:用jQuery的data()方法(最推荐)

jQuery的data()方法专门设计用来在DOM元素上存储任意类型的数据,它不会把数据存在DOM的data-*属性里(而是存在jQuery内部的缓存中),所以可以直接存对象,不需要转换:

// 先修正你的变量定义(原写法有误,会报错)
var temp = { name: "first" };
// 或者分步声明:var temp = {}; temp["name"] = "first";

// 给目标元素存储对象
$('#image01').data('polygon', temp);

// 获取对象(直接拿到原对象)
var retrievedObj = $('#image01').data('polygon');
console.log(retrievedObj.name); // 输出 "first"

这个方法的好处是不用处理序列化/反序列化,而且支持存储任何类型的数据(包括函数、复杂嵌套对象),不会有JSON的限制。

方案2:JSON序列化(适合需要DOM属性可见的场景)

如果你确实需要把数据存在DOM的data-polygon属性里(比如要让HTML源码里能看到这个值,或者其他非jQuery代码要读取),可以用JSON把对象转成字符串存储,取的时候再转回来:

var temp = { name: "first" };

// 存储:把对象转成JSON字符串
$('#image01').attr('data-polygon', JSON.stringify(temp));

// 获取:把JSON字符串转回对象
var retrievedObj = JSON.parse($('#image01').attr('data-polygon'));
console.log(retrievedObj.name); // 输出 "first"

注意:如果你的对象里包含循环引用(比如对象引用自身),或者有函数、undefined这类JSON不支持的类型,JSON.stringify会报错或者丢失数据,这种情况就不适合用这个方案。

内容的提问来源于stack exchange,提问作者jmanoj86

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:15:44