2

我正在尝试使用 jquery 获取数据属性的内容,但返回的数据不是我设置的。

用这个简单的例子:

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

$('#test').data('test')返回1而不是[1]

使用纯javascript没问题。

在线查看:https ://jsfiddle.net/jojhm2nd/

4

2 回答 2

4

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

$("#test").attr("data-test");

data确实读取data-*属性,但只是为该元素初始化 jQuery 的数据缓存。(而且它从不属性。)它做了一系列的事情,包括更改名称(例如 become )和解释值data-testing-one-two-threetestingOneTwoThree在这种情况下,它将值解释为一个数组,因为它以[. 当您使用 显示该数组时alert,它会被强制转换为字符串,而当您将数组强制转换为字符串时,它会执行Array#join. 例如,如果您的属性是[1, 2],您会看到1,2结果。

从上面链接的文档中:

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

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

于 2015-11-13T12:41:34.433 回答
2

.data当您使用该方法时,jQuery 会发挥作用。

来自 jQuery 网站:

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

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

$('#test').attr('data-test');
于 2015-11-13T12:41:43.873 回答