我正在使用DataTable plugin。
我想选择两列表格并作为数组进行进一步处理。
从$ .post()调用我以下面的形式得到Json:
{"sEcho": 26,
"iTotalRecords": 26,
"iTotalDisplayRecords": 10,
"aaData": [[ "20090301","60"],
[ "20090302","253"],
[ "20090303","108"],
[ "20090304","166"],
... [snip] ...
[ "20090327","209"],
[ "20090328","452"],
[ "20090329","450"],
[ "20090330","143"]
],
"aoColumns": [{"sTitle": "The observed Date"},
{"sTitle": "number of objects"}
]
}
然后我将表格显示为:
$('#queryTable').dataTable(jsondata);
哪里
<table class="display" id="queryTable"></table>
我想在表格的列上添加点击事件,它会返回javascript 数组。
如何在数据表中获取整列?
答案 0 :(得分:2)
这样的事情可行:
var myTable = $("#queryTable").dataTable(
{
"aaData": myData,
"aoColumns": myColumns
}
);
myDataArray = myTable.fnGetData();
myColumnArray = []
$("#queryTable thead tr th").click(function()
{
var index = $(this).index();
for (var i = 0; i < myTable.fnSettings().fnRecordsTotal(); i++)
{
myColumnArray[i] = myDataArray[i][index];
}
}
);
以下是一个工作示例:http://jsfiddle.net/srMZR/5/。单击列标题以获取该列的数据数组。
答案 1 :(得分:1)
答案 2 :(得分:0)
嗯,亚当的答案就是你所需要的(正如你已经回答的那样),但这是一种(有点更难)的方式。由于我已经工作了一段时间,我会继续发布它。 :)
基本上,我只是遍历表行,然后使用子选择器:eg()来获取第1列和第2列。
请注意,我做两次的唯一原因是确保它正常工作(确实如此,从显示下拉列表中选择25并转到第2页)。
您希望看到的是:
$('#queryTable tbody tr').each(function(){
var date = $(this).children('td:eq(0)').text();
var obj = $(this).children('td:eq(1)').text();
...
});
基本上,我所做的是通过将所有行复制到JSON数组(两次......)来复制表,然后创建另一个DataTable。我使用pre标签来保存数组文本,并使用jQuery.parseJSON()来使用。
所以,如果由于某种原因你想这样做,这是一个例子。
<强> HTML 强>
<table class="display" id="queryTable"></table>
<table class="display" id="queryTable2"></table>
<br style="clear: both;"/>
<pre id="json"></pre>
<强>的Javascript 强>
var jsondata = {"sEcho": 26,
"iTotalRecords": 26,
"iTotalDisplayRecords": 10,
"aaData": [[ "20090301","60"],
[ "20090302","253"],
[ "20090303","108"],
[ "20090304","166"],
[ "20090327","209"],
[ "20090328","452"],
[ "20090329","450"],
[ "20090330","143"]
],
"aoColumns": [{"sTitle": "The observed Date"},
{"sTitle": "number of objects"}
]
};
$('#queryTable').dataTable(jsondata);
var numrows = 1;
$('#queryTable tbody tr').each(function(){
var date = $(this).children('td:eq(0)').text();
var obj = $(this).children('td:eq(1)').text();
var row = "[\""+date+"\",\""+obj+"\"],\n";
row = numrows == 1 ? "["+row : row;
$('#json').append(row);
numrows++;
});
numrows = 1;
$('#queryTable tbody tr').each(function(){
var date = $(this).children('td:eq(0)').text();
var obj = $(this).children('td:eq(1)').text();
var comma = $('#queryTable tbody tr').length != numrows ? "," : "]";
var row = "[\""+date+"\",\""+obj+"\"]"+comma+"\n";
//row = numrows == 1 ? "["+row : row;
$('#json').append(row);
numrows++;
});
var jsondata2 = jsondata;
jsondata2.aaData = jQuery.parseJSON($('#json').text());
$('#queryTable2').dataTable(jsondata2);