我试图这样做,
var worker_ids = $.parseJSON($(':selected',this).data('workers'));
但我一直回来null
。所以我试着记录
$(':selected',this).data('workers')
它把我的工人作为一个阵列送回来了!
我的HTML看起来像:
<option value="77" data-workers="["2287","2137"]">COOL KIDS</option>
我原本以为它会以字符串的形式返回,我必须解析它。
这对我来说非常合适,但它似乎不是一个非常好的设计决定。如果我的属性恰好看起来像JSON怎么办?
答案 0 :(得分:7)
是的,jQuery会尝试猜测存储在数据属性上的数据类型,并在使用.data
时对其进行转换(也适用于数字,对象等)。
要获取原始属性值,请使用.attr('data-workers')
答案 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>