我有这个HTML:
<section id="SSID" data-texts="'Text1', 'Text2', 'Text3'"></section>
我想在jQuery中创建一个Array变量,我的jQuery代码是:
$(document).ready(function() {
var Selection = $("#SSID").data("texts");
var Texts = [ Selection ];
console.log(Texts.length);
});
对于我的例子,我期望的结果是:
Texts[0] = 'Text1'
Texts[1] = 'Text2'
Texts[2] = 'Text3'
...数组Texts
的长度 3 。
但是,我看到的是Texts
的长度 1 并且整个字符串都被加载到Texts[0]
中:
Texts[0] = "'Text1', 'Text2', 'Text3'"
我认为我的问题是由"
(引号)字符引起的。如何克服这个问题,实现我的目标?
答案 0 :(得分:17)
data-
属性可以包含JSON。
如果它们在语法上有效,jQuery会自动为你解析它们。
<section id="SSID" data-texts='["Text1", "Text2", "Text3"]'></section>
和
$(function() {
var texts = $("#SSID").data("texts");
console.log(texts.length); // logs "3"
});
请参阅:http://jsfiddle.net/5mtre/
安全提示:您必须在服务器上正确编码JSON。
这意味着您需要执行JSON编码和 HTML编码,这里使用PHP显示示例:
<section id="SSID" data-texts="<?=htmlspecialchars(json_encode($data), ENT_QUOTES, 'UTF-8')?>"></section>
答案 1 :(得分:7)
您可以使用 JSON.parse()
HTML:
<section id="SSID" data-texts='"Text1", "Text2", "Text3"'></section>
JQUERY:
var Selection = JSON.parse('[' + $("#SSID").data("texts") + ']');
或
HTML:
<section id="SSID" data-texts='"Text1", "Text2", "Text3"'></section>
JQUERY:
var Selection = JSON.parse($("#SSID").data("texts"));
仅供参考:但最好将实际的JSON存储为数据属性值。例如:data-texts='["Text1", "Text2", "Text3"]'
并直接解析它。
更新或者您可以使用Array#map
方法和String#split
方法完成此操作。
var Selection = $("#SSID").data("texts").split(',').map(JSON.parse);
console.log(Selection);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<section id="SSID" data-texts='"Text1", "Text2", "Text3"'></section>