jQuery会自动解码data- *属性吗?

时间:2013-06-27 18:16:25

标签: jquery json

我试图这样做,

var worker_ids = $.parseJSON($(':selected',this).data('workers'));

但我一直回来null。所以我试着记录

$(':selected',this).data('workers')

它把我的工人作为一个阵列送回来了!

我的HTML看起来像:

<option value="77" data-workers="[&quot;2287&quot;,&quot;2137&quot;]">COOL KIDS</option>

我原本以为它会以字符串的形式返回,我必须解析它。

这对我来说非常合适,但它似乎不是一个非常好的设计决定。如果我的属性恰好看起来像JSON怎么办?

2 个答案:

答案 0 :(得分:7)

是的,jQuery会尝试猜测存储在数据属性上的数据类型,并在使用.data时对其进行转换(也适用于数字,对象等)。

要获取原始属性值,请使用.attr('data-workers')

实际操作由the internal dataAttr function

执行

答案 1 :(得分:1)

对于由原始HTTP响应创建的数据属性,jQuery会尝试猜测预期的变量类型。例如,如果原始HTTP响应服务器属性为data-foo="true",则jQuery会将此解释为Javascript布尔值true

但是,如果使用jQuery将data属性设置为字符串,jQuery将记住您存储了一个字符串,并且不再尝试猜测。

这是一段代码片段,证明了我的意思:

console.log(typeof $("main").data("foo"));

$("main").data("foo", "true");
console.log(typeof $("main").data("foo"));
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>

<main data-foo="false">main</main>