我在数据属性中有数据,如下所示:
<div class="dashboard-module" data-rows="new Date(2013,10,04),12,"OR"##new Date(2013,10,17),2,"OR"##new Date(2013,10,09),2,"CA""></div>
我试图将此字符串拆分并在data.addRow函数中使用它:
rows = el.data('rows');
rowsarray = rows.split('##');
// Error: Row given with size different than 3 (the number of columns in the table).
$.each(rowsarray, function(index, value) {
data.addRow( [value] );
});
// the following works
data.addRow([new Date(2013,10,04),12,"OR"]);
data.addRow([new Date(2013,10,09),2,"CA"]);
data.addRow([new Date(2013,12,12),14,"AL"]);
我猜新日期内的逗号是否被视为数组的不同部分?
答案 0 :(得分:1)
我假设您的data-rows
属性中的双引号被转义(否则HTML会被错误标记)。
当您致电rowsarray = rows.split('##');
时,您将获得一系列字符串,如下所示:
[
'new Date(2013,10,04),12,"OR"',
'new Date(2013,10,17),2,"OR"',
'new Date(2013,10,09),2,"CA"'
]
不是数组数组。如果要将数据存储在HTML属性中,最好的办法是使用与JSON兼容的格式。然后问题变成存储日期,因为Date对象不是JSON兼容的,但这很容易解决。改为存储您的数据:
[["Date(2013,10,04)",12,"OR"],["Date(2013,10,17)",2,"OR"],["Date(2013,10,09)",2,"CA"]]
我使用data-rows
属性做了两件事:首先,我将日期从new Date(2013,10,17)
格式更改为类似"Date(2013,10,17)"
的字符串。其次,我将字符串转换为数组数组的JSON字符串表示形式(使用标准的javascript数组括号[
和]
)。请注意,JSON要求对所有内部字符串使用双引号,因此您必须转义所有内部字符串以与data-rows
属性一起使用,或者在data-rows
属性字符串周围使用单引号(例如, :data-rows='<string>'
)。
然后,您可以解析该字符串以进入DataTable:
rows = JSON.parse(el.data('rows'));
// convert date strings to Date objects
for (var i = 0; i < rows.length; i++) {
var dateStr = rows[i][0];
var dateArr = dateStr.substring(5, dateStr.length - 1).split(',');
rows[i][0] = new Date(dateArr[0], dateArr[1], dateArr[2]);
}
data.addRows(rows);