Javascript 为什么jquery从数据html5属性中删除括号?

Javascript 为什么jquery从数据html5属性中删除括号?,javascript,jquery,html,html5-data,Javascript,Jquery,Html,Html5 Data,我试图用jquery获取数据属性的内容,但返回的数据不是我设置的 通过这个简单的例子: <div id="test" data-test="[1]"></div> 但是$('#test')。数据('test')返回1,而不是[1] 使用纯javascript没有问题 联机查看:jQuery不是属性访问器函数。(这是一个常见的错误,很容易犯。)要仅访问该属性,请使用 data读取data-*属性,但仅用于初始化该元素的jQuery数据缓存。(而且它从不写属性。)它做一

我试图用jquery获取数据属性的内容,但返回的数据不是我设置的

通过这个简单的例子:

<div id="test" data-test="[1]"></div>

但是
$('#test')。数据('test')
返回
1
,而不是
[1]

使用纯javascript没有问题

联机查看:

jQuery不是属性访问器函数。(这是一个常见的错误,很容易犯。)要仅访问该属性,请使用

data
读取
data-*
属性,但仅用于初始化该元素的jQuery数据缓存。(而且它从不写属性。)它做一系列的事情,包括更改名称(
数据测试一二三
变为
测试网络树
)和解释值。在本例中,它将值解释为数组,因为它以
[
开头。当您使用
警报显示该数组时,它将被强制为字符串,当您将数组强制为字符串时,它将执行
数组#连接
。如果您的属性是
[1,2]
,例如,您会看到结果是
1,2

从上面链接的文档中:

每次尝试都会将字符串转换为JavaScript值(包括布尔值、数字、对象、数组和null)。只有在不改变值的表示形式的情况下,才会将值转换为数字。例如,“1E02”和“100.000”等同于数字(数值100)但是转换它们会改变它们的表示形式,因此它们被保留为字符串。字符串值“100”被转换为数字100

当数据属性是对象(以“{”)或数组(以“[”开头)时,则使用jQuery.parseJSON解析字符串;它必须遵循有效的JSON语法,包括带引号的属性名。如果该值不能作为JavaScript值解析,则将其保留为字符串


当您使用
.data
方法时,jQuery发挥了神奇的作用

从jQuery网站:

每次尝试都会将字符串转换为JavaScript值 (这包括布尔、数字、对象、数组和null)

您可以使用
.attr
方法执行以下操作:

$('#test').attr('data-test');
尝试使用
attr('data-test')
$('#test').attr('data-test');