我正在努力寻找合适的方法来做到这一点。基本上,我有一个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行,只有一个我想避免的选择。
有什么见解?
由于
答案 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以获取代码和演示。