8

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

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

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

4

3 回答 3

10

我遇到了同样的问题。虽然公认的解决方案可能有效,但我找到了更好的方法:

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

有关更多信息,请参阅选择器修饰符文档。

于 2014-06-03T12:14:05.123 回答
8

这是使用 3 个 API 回调的一种解决方案。

  1. 为变量创建CurrentData
  2. 重置CurrentData为空数组fnPreDrawCallback,在呈现新表之前在其中触发
  3. fnRowCallback允许访问每一行的数据数组,将该数组推入CurrentData数组
  4. fnDrawCallback在表格呈现后触发,现在可以访问CurrentData数组中的排序数据

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)
    }
});

演示:http: //jsfiddle.net/ne24B/

于 2013-02-12T02:49:54.810 回答
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 美分。

于 2013-02-13T18:25:15.737 回答