从datatables.js中的数据属性获取一行

时间:2015-09-22 19:12:07

标签: javascript datatables

我正在努力寻找合适的方法来做到这一点。基本上,我有一个id值数组,对应于我的表中选择了哪些行。要构造此列表,我使用以下代码。 this.options.ajaxId是访问传递给表的数据对象中的Id值的键。

this.getRowData(target)[this.options.ajaxId]

我的getRowData函数是:

getRowData: function (HTMLrow) {
    return this.dataTable.row(HTMLrow).data();
},

这很好用,但是当我通过分页,排序或搜索重新绘制表格时,我会在下一步重复选择正确的行时难以接受。我的计划是遍历ID并查找哪个表行对应于该ID值,但我找不到输入键值搜索对的函数并返回html行。以下是我的想法,

this.dataTable.findRow( key, value );
// then my usage would be the following:
var that = this;
_.each(this.selectedList, function (id) {
    var row = that.dataTable.findRow( that.options.ajaxId, id );
    // code to select the row
});

我还没有编写它,但我知道我可以遍历每一行,获取该行的数据,并根据我要查找的内容进行检查,但是在用户正在查看的情况下100行,只有一个我想避免的选择。

有什么见解?

由于

1 个答案:

答案 0 :(得分:1)

  

解决方案#1

如果行ID存储在其中一个字段中,您可以使用以下代码根据行ID查找和突出显示行。

// Index of column containing IDs
var colIdIndex = 0;

// List of row IDs
var rowIds = ['2', '4', '6'];

// Find indexes of rows which have IDs in the desired column
var rowIndexes = table.rows().eq(0).filter( function (rowIdx) {
    return ($.inArray(table.cell( rowIdx, colIdIndex ).data(), rowIds) !== -1) 
        ? true 
        : false;
});    

// Select rows based on array of found row indexes
table.rows(rowIndexes)
    .nodes()
    .to$()
    .addClass('selected');

有关详细信息,请参阅filter() API方法。

请注意,此方法仅适用于客户端处理模式。

<强>样本

请参阅this jsFiddle以获取代码和演示。

  

解决方案#2

在客户端和服务器端处理模式下都可以使用的替代方法是使用createdRow回调。

例如:

// Index of column containing IDs
var colIdIndex = 0;

// List of row IDs
var rowIds = ['2', '4', '6'];

var table = $('#example').DataTable({
    createdRow: function( row, data, dataIndex ) {
        if ( $.inArray(data[colIdIndex], rowIds) !== -1) {
            $(row).addClass('selected');
        }
    }        
});

<强>样本

请参阅this jsFiddle以获取代码和演示。