如何从表中选择两列数据?

时间:2011-02-04 16:11:06

标签: jquery datatable jquery-plugins html-table

我正在使用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 数组

如何在数据表中获取整列?

3 个答案:

答案 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)

这可能会有所帮助: http://www.bramstein.com/projects/column/

答案 2 :(得分:0)

嗯,亚当的答案就是你所需要的(正如你已经回答的那样),但这是一种(有点更难)的方式。由于我已经工作了一段时间,我会继续发布它。 :)

http://jsfiddle.net/bXBhZ/4/

基本上,我只是遍历表行,然后使用子选择器: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);