如何将JavaScript数组存储在HTML自定义数据属性中?
我尝试了JSON字符串化和转义字符的各种变体。
存储数组并再次检索它的精确方法是什么?
我用[ $("#firstSelectedElement").val(), $("#secondSelectedElement").val() ]
构建数组,用$("#storageElement").data('storeit')
检索id="storageElement" data-storeIt="stuff"
。
我似乎永远无法将数据检索为真正的数组,只能检索字符数组。
7条答案
按热度按时间oymdgrw71#
这取决于你在数组中存储的数据类型,如果它只是字符串(看起来是这样),并且你有一个你知道永远不会成为你的数据的一部分的字符(比如下面例子中的逗号),那么我会忘记JSON序列化,而只使用string.split:
然后在检索时:
它的处理能力比使用JSON要好一些,使用的字符更少,而且比
JSON.parse
更便宜。但是,如果必须这样做,JSON实现应该类似于:
并检索:
注意,在这个例子中,我们必须在
data-storeIt
属性两边使用半引号('
),这是因为JSON语法要求我们在数据中的字符串两边使用引号。u1ehiz5o2#
HTML5 data属性只能存储字符串,所以如果你想存储一个数组,你需要序列化它。JSON可以工作,看起来你走对了路。你只需要在检索序列化数据后使用
JSON.parse()
:回顾API文档,jQuery应该尝试自动转换JSON编码的字符串,只要它被正确编码。你能给予一个你正在存储的值的例子吗?
还要注意HTML5 data attribute和jQuery
.data()
方法是两个不同的东西。它们相互作用,但是jQuery更强大,可以存储任何数据类型。你可以直接使用jQuery存储javascript数组,而不需要序列化它。但是如果你需要在标记中将它作为HTML5 data attribute,那么你只能使用字符串。tp5buhyn3#
需要说明的是,它对编码实体不起作用,但似乎要将其解析为对象,data属性必须是格式良好的JSON对象。
所以我可以使用一个对象:
或者只用单引号
是时候玩得开心了
zfycwa2u4#
您可以将任何对象存储到节点中,如下所示:
p4rjhz4m5#
如果你需要嵌套的数组或者其他的方法来实现它。
如Ulysse BN所建议
或者使用eval(),这是Bonifacius Sarumpaet所指出的危险解决方案,但可以正常工作
0g0grzrc6#
如果使用PHP,请在PHP中执行以下操作:
检查时的HTML如下所示:
现在在javascript中检索数组,但是如果它只有一个值,它返回一个字符串,所以你必须测试并修正这个问题,如果它是一个字符串,我们必须去掉多余的引号,$(this)必须指向对象。
mhd8tkvw7#
您可以在元素
data
属性中使用HTML转义字符来获得类似JSON的数组(编码为引号):然后在JavaScript中获得它,无需任何额外的魔法:
看这个JSFiddle demo。
但是,转义不是必需的。您可以改为执行以下操作:
看这个JSFiddle demo。