为 DataTables aoColumnDefs 创建 JavaScript 数组(JSON 格式)
Posted
技术标签:
【中文标题】为 DataTables aoColumnDefs 创建 JavaScript 数组(JSON 格式)【英文标题】:Create JavaScript array (JSON format) for DataTables aoColumnDefs 【发布时间】:2012-08-31 22:37:30 【问题描述】:我想为 DataTables 参数 aoColumnDefs 创建以下 JSON 数据:
var aryJSONColTable = [
"sTitle": "Column00", "aTargets": [0],
"sTitle": "Column01", "aTargets": [1],
"sTitle": "Column02", "aTargets": [2],
"sTitle": "Column03", "aTargets": [3]
]
然后我将变量放入我的 DataTable 变量声明中,如下所示:
var oTable = $('#report').dataTable(
"aoColumnDefs": aryJSONColTable,
"bProcessing": true,
"bServerSide": true,
"bLengthChange": true,
"bFilter": true,
"aaSorting": [[ 3, "desc" ]],
"sScrollX": "100%",
"bScrollCollapse": true,
"bJQueryUI": true,
"sAjaxSource": "./getDataEA.php"
);
基于this useful discussion,我尝试了一个javascript循环来创建JSON数据aryJSONColTable,如下所示:
//create JSON array for aoColumnDefs
var aryColTableChecked = ["column00", "column01", "column02", "column03"];
var aryJSONColTable = [];
for (var i in aryColTableChecked)
aryJSONColTable.push(
"sTitle": aryColTableChecked[i],
"aTargets": [i]
);
;
我总是从上面的 JavaScript 循环中为数据“aTargets”获取值“1”,我希望为数据“aTargets”获取值 [running_index_number]。
请在这件事上帮助我。提前谢谢你。
【问题讨论】:
工作表。为什么你认为这些数组的第一个值总是1
?
这是您在所需输出中两次输入Column02
的错字吗?
是的,nnnnn,你的眼睛很敏锐 :-) 我已经编辑到 Column03。不过感谢您的评论。
【参考方案1】:
我建议您将for..in
循环更改为标准for
循环,因为使用for..in
迭代数组是“危险的”,因为如果您使用的库将属性/方法添加到@ 987654326@ 然后循环也会遍历这些。
另外,带有for..in
的迭代器i
将是一个字符串,创建"aTargets" : ["0"]
,并且您希望它是一个数字来创建@ 987654330@.
var aryColTableChecked = ["column00", "column01", "column02", "column03"];
var aryJSONColTable = [];
for (var i = 0; i < aryColTableChecked.length; i++)
aryJSONColTable.push(
"sTitle": aryColTableChecked[i],
"aTargets": [i]
);
;
似乎工作正常:http://jsfiddle.net/nnnnnn/Ek8tr/
注意:您生成的是不是 JSON,它是一个对象数组。 (JSON 是一种数据交换格式,始终是 字符串。 JSON 看起来像 JS 对象字面量和数组字面量语法,但不是一回事。)
【讨论】:
你不应该自己使用for-in-enumeration,那么:-) 但是,字符串(一个真实值)可能是这里的问题。 @Bergi - 糟糕 - 我以为我已经从我的小提琴中复制了标准的for
代码,但我一定是从问题中复制了它。谢谢。固定的。我无法复制 OP 提到的问题,虽然 every 元素中有"1"
。
您好 nnnnnn,感谢您的快速回复。我已经尝试了您上面的建议,但我仍然得到数据“aTargets”的价值 [1]。此 JSON 格式在 JQuery DataTables 参数 aoColumnDefs 中指定,您可以查看此链接 datatables.net/usage/columns 了解更多详细信息。
我无法解释这个结果。您可以在我的 jsfiddle 演示中看到 aryJSONColTable
最终得到正确的值。您在什么时候检查值并找到[1]
?在调用.dataTable()
方法之前还是之后?
是的,nnnnn,你说得对!它现在工作正常!以前我使用 Firebug-Watch 面板查看数组值,它总是向我显示数据“aTargets”的值 [1],但是当你深入了解它的值时,它真的会得到 [0]、[1] 等等.谢谢大家的大力帮助。我也开始按照您的建议学习如何使用 jsfiddle ;-)【参考方案2】:
for...in
用于对象而不是数组,aryColTableChecked
是一个数组。你可以这样做:
var arr = [];
var max = 3; // zero based
for (var i = 0, n; i <= max; i++)
n = i > 9 ? '' + i : '0' + i; // make sure it has 2 digits
arr.push(
sTitle: 'Column' + n,
aTargets: [i] // why array here?
);
【讨论】:
+1:我认为问题“为什么在这里排列?”是真正的问题。 我想你想要max = 4
或i <= max
。
酷。另一件事:我刚刚注意到您使用了i.length
- 当i
是一个数字时,它是否有效? (IE 给了我undefined
为i.length
所以我会使用i > 9
。)
在 Chrome 中为我工作 jsfiddle.net/reZrR 但我会按照 @bergi 的建议进行操作
用max = 13
试试你的小提琴,看看会发生什么。 undefined > 1
是 false
。以上是关于为 DataTables aoColumnDefs 创建 JavaScript 数组(JSON 格式)的主要内容,如果未能解决你的问题,请参考以下文章
将 JSON 值加载到 dataTables textarea 字段中
DataTables warning: table id=DataTables_Table_0 - Requested unknown paramete