Jquery Datatables 仅在几列的标题中添加搜索过滤器

Posted

技术标签:

【中文标题】Jquery Datatables 仅在几列的标题中添加搜索过滤器【英文标题】:Jquery Datatables add search filter to header for a few columns only 【发布时间】:2021-12-04 13:19:39 【问题描述】:

我在由 Datatables 插件生成的表的标题中添加了一个搜索框。它在标题的每一列上方放置一个搜索框。我需要将搜索过滤器仅应用于几列。假设第 0 列和第 6 列需要搜索过滤器,而其他列则不需要。有没有办法做到这一点?我无法在任何地方找到如何实现这一点的答案,而且我是编码新手,所以我还没有找到实现这一点的方法。下面的代码我用来创建搜索标题。

$('#OBTable thead tr')
        .clone(true)
        .addClass('filters')
        .appendTo('#OBTable thead');
                
                var table = $('#OBTable').dataTable(
                
                 "ajax": 
                    "url": "SelectData.php",
                    "dataSrc": "data",
                ,
                 orderCellsTop: true,
                 select: true,
                   initComplete: function () 
            var api = this.api();
 
            // For each column
            api
                .columns()
                .eq(0)
                .each(function (colIdx) 
                    // Set the header cell to contain the input element
                    var cell = $('.filters th').eq(
                        $(api.column(colIdx).header()).index()
                    );
                    var title = $(cell).text();
                    $(cell).html('<input type="text" placeholder="' + title + '" />');
 
                    // On every keypress in this input
                    $(
                        'input',
                        $('.filters th').eq($(api.column(colIdx).header()).index())
                    )
                        .off('keyup change')
                        .on('keyup change', function (e) 
                            e.stopPropagation();
 
                            // Get the search value
                            $(this).attr('title', $(this).val());
                            var regexr = '(search)'; //$(this).parents('th').find('select').val();
 
                            var cursorPosition = this.selectionStart;
                            // Search the column for that value
                            api
                                .column(colIdx)
                                .search(
                                    this.value != ''
                                        ? regexr.replace('search', '(((' + this.value + ')))')
                                        : '',
                                    this.value != '',
                                    this.value == ''
                                )
                                .draw();
 
                            $(this)
                                .focus()[0]
                                .setSelectionRange(cursorPosition, cursorPosition);
                        );
                );
        ,

【问题讨论】:

【参考方案1】:

DataTables columns() API 函数可以指定为column selector。这可以采取各种形式。一种选择是提供一个数组,其中包含要包含搜索过滤器的列的索引。

因此,例如,您可以指定:

.columns( [0, 6] )

我建议你也看看以下官方示例中的方法:

Individual column searching (text inputs) Individual column searching (select inputs)

您还应该删除 eq(0) 调用 - 我不认为这是一个有效的 DataTables API 函数。

正如您从文档中看到的,您还可以使用其他选项 - 例如在相关标题单元格中提供类名 - 但索引数组可能是最简单的方法。


更新

后续问题是:

现在其余的列包含列标题的名称。有没有办法让这些为空?

您还没有向我们展示您的 HTML 表格是什么样的,所以这是一个猜测,基于您从一个标题行开始的假设...我认为这是一个合理的假设...

如果你想避免重复的列标题,那么你需要在执行colone()之后清除克隆的标题行的内容。

一种方法如下:

$('#OBTable thead tr:eq(1) th').text("");

这意味着克隆的行将开始时在任何标题单元格中都没有值。

这需要在执行克隆操作的命令之后、创建 DataTable 之前添加。

【讨论】:

感谢您的反应,这似乎有效。但是现在其余的列包含列标题的名称..有没有办法让这些为空? 也许使用这一行的方法 .addClass('filters') 仅列 0 和 6 可以解决完整的问题?但我不知道如何将该类添加到仅第 0 和第 6 个元素.. 如果我正确理解了您的评论,您可以使用另一个 jQuery 命令清除每个克隆的标题单元格,在您配置 DataTable 之前,我已经更新了答案。 添加如下代码: $('#OBTable thead tr') .clone(true) .addClass('filters') .appendTo('#OBTable thead'); $('#OBTable thead tr:eq(1) th').text("");这将删除在占位符中添加标题的选项。但我可以忍受。谢谢! 我的下一个后续问题是如何确保只找到准确的值。因此,当我搜索 Anneke 时,结果是 Anneke,而不是现在 Janneke 也显示出来了。

以上是关于Jquery Datatables 仅在几列的标题中添加搜索过滤器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jQuery DataTables 中添加静态列

jQuery 插件 (DataTables) 仅在页面刷新时正确加载

当前页面的 JQuery DataTables 列复选框

在 jquery datatables.net 中呈现布尔数据列的最佳方法

jQuery DataTables插件 aoColumnDefs跟aoColumns的用法

jQuery DataTables 初始化延迟