我正在尝试使用 jquery 获取数据属性的内容,但返回的数据不是我设置的。
用这个简单的例子:
<div id="test" data-test="[1]"></div>
但$('#test').data('test')
返回1
而不是[1]
使用纯javascript没问题。
我正在尝试使用 jquery 获取数据属性的内容,但返回的数据不是我设置的。
用这个简单的例子:
<div id="test" data-test="[1]"></div>
但$('#test').data('test')
返回1
而不是[1]
使用纯javascript没问题。
jQuerydata
不是属性访问器函数。(这是一个常见的错误,很容易犯。)要访问该属性,请使用attr
.
$("#test").attr("data-test");
data
确实读取data-*
属性,但只是为该元素初始化 jQuery 的数据缓存。(而且它从不写属性。)它做了一系列的事情,包括更改名称(例如 become )和解释值data-testing-one-two-three
。testingOneTwoThree
在这种情况下,它将值解释为一个数组,因为它以[
. 当您使用 显示该数组时alert
,它会被强制转换为字符串,而当您将数组强制转换为字符串时,它会执行Array#join
. 例如,如果您的属性是[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');