我在内存中创建一个 div:
var video_div = document.createElement('div');
video_div.className = "vidinfo-inline";
本质上我有一些变量:
var key = "data-video-srcs";
var value = '{"video1":"http://www.youtube.com/watch?v=KdxEAt91D7k&list=TLhaPoOja-0f4","video2":"http://www.youtube.com/watch?v=dVlaZfLlWQc&list=TLalXwg9bTOmo"}';
我使用 jquery 将该数据属性添加到 div:
$(video_div).attr(key, value);
这是我的问题。这样做之后我得到这个:
<div class="vidinfo-inline" data-video-srcs="{"video1":"http://www.youtube.com/watch?v=KdxEAt91D7k&list=TLhaPoOja-0f4","video2":"http://www.youtube.com/watch?v=dVlaZfLlWQc&list=TLalXwg9bTOmo"}"></div>
将 json 放在那里是行不通的。它必须用单引号引起来。它必须看起来像这样:
<div class="vidinfo-inline" data-video-srcs='{"video1":"http://www.youtube.com/watch?v=KdxEAt91D7k&list=TLhaPoOja-0f4","video2":"http://www.youtube.com/watch?v=dVlaZfLlWQc&list=TLalXwg9bTOmo"}'></div>
后来我做了这样的事情:
var video_srcs = $('.vidinfo-inline').data('video-srcs');
除非 json 包含在单引号中,否则这是行不通的。
有人有什么想法吗?
EDIT:
根据jquery:http://api.jquery.com/data/#data-html5 http://api.jquery.com/data/#data-html5
当 data 属性是对象(以“{”开头)或数组(以“[”开头)时,则使用 jQuery.parseJSON 来解析字符串;它必须遵循有效的 JSON 语法,包括带引号的属性名称。如果该值无法解析为 JavaScript 值,则它会保留为字符串。
因此我无法转义双引号,它必须位于单引号内。我有一个解决办法,除非其他人有更好的答案,否则我会将其作为答案发布。