2011-02-04 47 views
1

我正在使用DataTable plugin如何從表中選擇兩列數據?

我想選擇兩列表並獲得數組作爲進一步處理。

從$。員額()調用我在下面的表格獲得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 Array

如何獲取數據表中的整列?

+0

請加入這些東西重新表述的問題。確認數據源(ajax,javascript數組),並且如果可能的話放置示例數據 – naveen 2011-02-04 16:20:11

+0

好吧,我只是重新說明它。 – Arman 2011-02-04 16:40:47

回答

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/。單擊列標題以獲取該列的數據數組。

0

那麼,亞當的答案就是你需要的(正如你已經回答過的那樣),但是這是一個(更難)的方法。由於我工作了一段時間,我會繼續發佈。 :)

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

基本上,我只是遍歷錶行,然後使用一個子選擇:如()來獲取列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陣列(兩次...)複製表,然後在另一個數據表。我使用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);