将HTML数据属性中的数组转换为Javascript数组

将HTML数据属性中的数组转换为Javascript数组,javascript,jquery,google-maps,Javascript,Jquery,Google Maps,我需要将此数组传递到函数: [ ['ib-marker1', -24.9256,-43.8994, 0], ['ib-marker2', -22.9556,-43.8994, 0] ] 数组需要嵌入到HTML中,因此我添加了如下内容: <div id="map" data-markers="[['ib-marker1', -24.9256,-43.8994, 0],['ib-marker2', -22.9556,-43.8994, 0]]"> 这是一个谷歌地图功能。无法识别任何标

我需要将此数组传递到函数:

[
['ib-marker1', -24.9256,-43.8994, 0],
['ib-marker2', -22.9556,-43.8994, 0]
]
数组需要嵌入到HTML中,因此我添加了如下内容:

<div id="map" data-markers="[['ib-marker1', -24.9256,-43.8994, 0],['ib-marker2', -22.9556,-43.8994, 0]]">
这是一个谷歌地图功能。无法识别任何标记。我认为这是因为我的markers变量包含一个字符串,而不是一个真正的数组。我就是不知道怎么做

作为测试,我尝试将数组直接传递给变量(不在数据属性中),效果很好:

var pins = [['ib-marker1', -24.9256,-43.8994, 0],['ib-marker2',
-22.9556,-43.8994, 0]];

有人能帮我吗?谢谢

必须使用validJSON(不是对象文本),然后jQuery可以通过
.data(“标记”)
正确解析数据

有效的JSON使用双引号将字符串括起来(不是单引号):



(查看控制台)

考虑到没有人将正确答案作为实际答案发布,我将在此处发布dfsq和Ayyash的答案。这确实起到了作用:

var markers = eval($(this).find("#map").data("markers"));

var markers=eval($(this).find(#map”).data(“markers”)避免eval()并在数据标记content上尝试JSON.parse()。HTML属性是字符串。您的pins数组是一个javascript数组,它们是不同的。您需要编写代码来解析字符串,以创建包含所需数据的数组。JSON.parse不起作用,但eval起作用了!我为什么要避免eval()?无论如何,如果你把这个贴在一个真实的答案上,我会接受的。谢谢大家!如果可以更改数据参数的语法,例如用其他地方不出现的自定义字符替换大括号,您可以使用
split
将点数组作为字符串,然后运行
array.forEach
将每个元素进一步转换为一个小型嵌套数组。
评估用户可访问的元素数据?可能的攻击是:有人访问或附加
地图
,并修改页面上的
数据标记
。向数据中注入恶意JS字符串。您的代码将比处理JS更有效。这有多酷?这是一个很好的观点。你建议改做什么@罗科克布尔扬
<div id="map" data-markers="[[&quot;ib-marker1&quot;,-24.9256,-43.8994,0],[&quot;ib-marker2&quot;,-22.9556,-43.8994,0]]"></div>
var markers = eval($(this).find("#map").data("markers"));