Javascript 如何使用columns().every()仅检索包含筛选元素的列
我有一个DataTable,它要求我检索每列中最长的.text()元素。为了实现这一点,我实现了以下脚本Javascript 如何使用columns().every()仅检索包含筛选元素的列,javascript,jquery,datatables,Javascript,Jquery,Datatables,我有一个DataTable,它要求我检索每列中最长的.text()元素。为了实现这一点,我实现了以下脚本 $('#example').DataTable({ deferRender: true, autoWidth: false, drawCallback: function () { var table = $('#example').DataTable(); table.columns().every(function
$('#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()元素,但如果进行筛选,它将继续从每列的整个行列表中提取,而不管它们是否可见
示例。。。“未过滤” 鱼
示例。。。“过滤” 如果我将此数据表筛选为“Cat”。。。将只显示一个可见行。。。“鲶鱼” 鱼
在这个场景中,我的函数应该返回“Catfish”,但它会继续返回“腔棘鱼”。有没有办法让它忽略任何过滤行,只从屏幕上可见的“过滤”项中提取 提前谢谢 解决方案 使用适当的(
{search:'applied'}
)解释当前搜索查询,如果适用:
/。。。跳过。。。
table.columns().every(函数(索引){
var longestSoFar=-1;
var Longestem;
var column=table.column(索引,{search:'applied'});
column.nodes()到$()。每个(函数(){
//…跳过。。。
演示
有关代码和演示,请参阅
注释
jQuery DataTables版本1.10.6-1.10.9存在一个问题,其中({search:'applied'}
)不能用作API方法的参数,请参见此
如果使用1.10.9之后发布的nightly build或jQuery DataTables版本,则可以使用以下代码:
/…已跳过。。。
变量表=$(“#示例”).DataTable();
table.columns({search:'applied'}).every(函数(索引){
this.nodes()到$()。每个(函数(){
//…跳过。。。
它仍然会返回所有结果,甚至是从过滤器中删除的结果。其他任何人都需要注意……至少需要DataTables 1.10.9。@kojay,我的示例使用1.10.9,但columns()。every()
从1.10.6开始提供。人们甚至可以使用从1.10.0开始提供的。我完全同意你的看法。但是,使用上面的脚本和1.10.6有一个奇怪的复制问题。它会提取第一列的最长元素,并记录表中的每一列。当我检查DT的当前版本号时,我使用的是1.10.6并注意到您使用了1.10.9,所以我升级了我的版本,并按照您概述的那样工作。我只是不希望任何其他人尝试复制它,收到错误的结果,因为您的脚本在各个方面都是完美的。