3

我试图这样做,

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 怎么办?

4

2 回答 2

7

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

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

实际操作由内部dataAttr函数执行

于 2013-06-27T18:18:08.097 回答
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>

于 2017-08-17T09:57:50.093 回答