我有一个DataTable,要求我检索每列的最长.text()元素。为此,我实现了以下脚本。
$('#example').DataTable({
deferRender: true,
autoWidth: false,
drawCallback: function () {
var table = $('#example').DataTable();
table.columns().every(function () {
var longestSoFar = -1;
var longestItem;
this.nodes().to$().each(function () {
var text = $(this).text();
if (text.length > longestSoFar) {
longestSoFar = text.length;
longestItem = this;
}
});
var longestTD = $(longestItem).html();
console.log(longestTD);
});
}
});
此脚本正常工作并记录每列的最长.text()元素,但如果进行过滤,则会继续从每列的整个行列表中提取,无论它们是否可见。
示例..."未经过滤的"
FISH
在这种情况下,我的函数返回" Coelacanth",这是正确的。
示例..."已过滤"
如果我过滤这个DataTable用于" Cat" ...只会显示一个可见的行..." Catfish"。
FISH
在这种情况下,我的函数应该返回" Catfish",而是继续返回" Coelacanth"。有没有办法让这个忽略任何过滤的行,只有从"过滤的"屏幕上显示的项目?
提前致谢。
答案 0 :(得分:3)
<强>解强>
使用适当的selector-modifier
({ search: 'applied' }
)来考虑当前的搜索查询(如果适用):
// ... skipped ...
table.columns().every(function (index) {
var longestSoFar = -1;
var longestItem;
var column = table.column(index, { search: 'applied' });
column.nodes().to$().each(function () {
// ... skipped ...
<强>样本强>
请参阅this jsFiddle以获取代码和演示。
备注强>
jQuery DataTables版本1.10.6 - 1.10.9存在问题,其中selector-modifier
({ search: 'applied' }
)无法用作columns().every()
API方法的参数,请参阅此issue #679。
如果使用1.10.9之后发布的nightly build或jQuery DataTables版本,则可以使用以下代码:
// ... skipped ...
var table = $('#example').DataTable();
table.columns({ search: 'applied' }).every(function (index) {
this.nodes().to$().each(function () {
// ... skipped ...