【发布时间】:2020-03-04 10:02:05
【问题描述】:
我有一个带有页脚过滤的数据表。 每列有 1 个值,与处理页脚过滤的默认方式完美搭配:
//Add footer filtering
this.api().columns([2, 6, 7, 8, 9, 10]).every(function () {
var column = this;
var select = $('<select><option value=""></option></select>')
.appendTo($(column.footer()).empty())
.on('change', function () {
var val = $.fn.dataTable.util.escapeRegex(
$(this).val()
);
column
.search(val ? '^' + val + '$' : '', true, false)
.draw();
});
column.data().unique().sort().each(function (d, j) {
console.log(d);
if (d) {
var val = $('<div/>').html(d).text();
select.append('<option value="' + val + '">' + val + '</option>')
}
});
});
现在例外(第 6 栏);有一列填充了 3 种可能性:
1) 空
2) 一个值的数组
3) 具有多个值的数组
Atm 在下拉列表中选择一个选项时,过滤不会找到我认为的任何结果,因为它搜索文本并且那里的数据作为数组发送(见下文)。 de datatable本身的html插入如下:
<span class="badge badge-pill badge-primary">suborg test met lange titel</span>
我进行了广泛的搜索,但似乎找不到适合我的解决方案的正确方法。 结果应该是页脚过滤器下拉列表将为每个单独的标签包含一行,并且它实际上是过滤器。 所以理想的结果是:
(请注意,这是直接在 HTMl 中作为 ex 编辑的)
在上面的代码 sn-p 中有一个控制台日志,它显示了该列的数据是如何传递的:
我想为该列创建一个特定的页脚过滤,但我真的被困在如何处理数组数据上:
this.api().columns(6).every( function () {}
谁能提供我缺少的黄金提示?
提前致谢
编辑
这通过使用以下代码:
column.data().unique().sort().each(function (d, j) {
if (d) {
$.each(d, function (index, value) {
var val = $('<div/>').html(value).text();
select.append('<option value="' + val + '">' + val + '</option>');
});
}
});
但是过滤与数据表中的任何结果都不匹配.. 仍然非常坚持这一点。
【问题讨论】:
-
如果它是一个数组,你可以循环遍历它,然后创建一个搜索字符串或任何你想要的。
-
@AhmedSunny 感谢我错过的洞察力。我现在使用这种方法来更好地填充下拉列表(编辑 Q),但我仍然无法匹配数据表中的任何数据
-
试试这个,将 type: 'html' 添加到 tags 列的 columndef 中。看看它是否有效
标签: jquery datatables