我有一个包含网页名称的数据表:
|ID|Page |Domain |
----------------------------
|1 |test.com/page1|test.com|
|2 |test.com/page2|test.com|
|3 |xyz.net/page1 |xyz.net |
|4 |xyz.net/page2 |xyz.net |
我想做的是隐藏(而不是分组)具有重复域的行,并仅显示每个域的第一个结果:
|ID|Page |Domain |
----------------------------
|1 |test.com/page1|test.com|
|3 |xyz.net/page1 |xyz.net |
我知道如何hide rows based on their value,但是我不知道该怎么做.
我是否必须使用帮助程序映射/数组编写自己的代码,在其中存储已经显示的域?还是有更聪明的方法在数据表中执行此操作?
解决方法:
是.我相信最简单的方法是首先找到我们要排除的重复项,然后使用自定义过滤器仅显示那些未排除的行.
遍历所有行,将域已存在的行标记为“已排除”:
var domain, domains = []
table.rows().every(function(rowIdx, tableLoop, rowLoop) {
domain = this.data().domain;
if (~domains.indexOf(domain)) {
this.nodes().to$().attr('excluded', 'true')
} else {
domains.push(domain)
}
})
然后设置一个简单的自定义过滤器,该过滤器仅使未标记为“已排除”的行可见:
$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
return table.row(dataIndex).nodes().to$().attr('excluded') != 'true'
})
我们可以随时返回以显示所有行
$.fn.dataTable.ext.search.pop()
table.draw()
演示-> http://jsfiddle.net/w75pdyf9/