排序后从Datatables.net获取数据

时间:2013-02-12 01:42:02

标签: javascript jquery jquery-datatables

我正在使用Datatables来显示一些数据。我还有用于向数据添加新行的输入。当我添加这一行时,我重新初始化表,它会根据我给出的排序规则自动对新行进行排序。我的问题是:有没有办法按照当前正在查看的顺序从表中获取数据?每当我尝试  $('#tableCompetitors').dataTable().fnGetData(), 它按照它被添加到表中的顺序给我数据,而不是它被呈现的有序数据。

那么有一种简单的方法可以做我想要的吗?

P.S。如果它有帮助。原始数据源是从文本框提供的数组数组。我解析它,将它推送到一个数组,然后使用该数组作为数据源。

3 个答案:

答案 0 :(得分:8)

以下是一个使用3个API回调的解决方案。

  1. CurrentData
  2. 创建变量
  3. 重置CurrentData以清空fnPreDrawCallback内的数组,该数组在呈现新表之前触发
  4. fnRowCallback可以访问每一行的数据,将该数组推送到CurrentData数组
  5. 表格渲染后
  6. fnDrawCallback触发,现在可以访问CurrentData数组中的已排序数据
  7. JS

      var currData = [];
      $('#example').dataTable({
        "fnPreDrawCallback": function(oSettings) {
            /* reset currData before each draw*/
            currData = [];
        },
        "fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {
            /* push this row of data to currData array*/
            currData.push(aData);
    
        },
        "fnDrawCallback": function(oSettings) {
            /* can now access sorted data array*/
            console.log(currData)
        }
    });
    

    DEMO:http://jsfiddle.net/ne24B/

答案 1 :(得分:8)

我遇到了同样的问题。虽然接受的解决方案可行,但我找到了更好的方法:

$("example").DataTable().rows({search:'applied'}).data()

有关详细信息,请参阅selector-modifier文档。

答案 2 :(得分:2)

试图给你另一种选择。

以下内容将获取表中的所有行,即使它们已被过滤掉:

var currData = [];
var oTable = $('#example').dataTable();

oTable.$("tr").each(function(index, row){
    //generate your array here
    // like $(row).children().eq(0) for the first table column
    currData.push($(row).children().eq(0));
    // return the data in the first column
    currData.push($(row).children().eq(0).text());
});

或者如果您只想要与过滤器匹配的结果:

var currData = [];
var oTable = $('#example').dataTable();

oTable.$("tr", {"filter":"applied"}).each(function(index, row){
    //generate your array here
    // like $(row).children().eq(0) for the first table column
    currData.push($(row).children().eq(0));

    // return the data in the first column
    currData.push($(row).children().eq(0).text());
});

currData将包含第一列数据的排序列表。

编辑: 将整行的文本放入数组中。

$(row + " td").each(function(index, tdData){
    currData.push($(tdData).text());
});

$(row).children().each(function(index, tdData){
    currData.push($(tdData).text());
});

通过这种方式,您可以更好地控制数组可以包含的内容。我的2美分。