【问题标题】:Datatables <thead> dropdown filter not working数据表 <thead> 下拉过滤器不起作用
【发布时间】:2022-01-24 07:01:19
【问题描述】:

我将下拉过滤器放入&lt;thead&gt;&lt;/thead&gt;。但它不能正常工作。我网站中的搜索过滤器运行良好,但下拉过滤器却不行。与here 中的示例相比,我什至检查了&lt;option&gt;&lt;select&gt; 的html 代码。当我选择一个&lt;option&gt; 时,表格将其识别为不匹配的值,所有行都缺失。

这是表格和 html 检查器的屏幕截图:

这是我的&lt;select&gt;下拉html代码:

<option value=""></option>
<option value="SK Ambong">SK Ambong</option>
<option value="SK Dudar">SK Dudar</option>
<option value="SK Kitou">SK Kitou</option>

这是我的 JS 代码:

$('table').DataTable({
    ordering: false,
    initComplete: function () {
        const nonSearchableColNo = [1, 6, 7, 8];
        var api = this.api();

        // For dropdown column
        api.columns(2).every( function () {
            var column = this;
            var select = $('<select><option value=""></option></select>')
                .appendTo( $(column.header()).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 ( data, j ) {
                optionVal = data.match(/SK [A-Z]\w+/g);
                select.append( '<option value="'+optionVal+'">'+optionVal+'</option>' )
            } );
        } );
    }
});

【问题讨论】:

    标签: javascript jquery datatables


    【解决方案1】:

    datatables.net documentation(和您的代码)与 完整字符串 匹配,因此这将是“SK Dudar 1”,但您得到的是 SK+[word],例如“ SK Dudar”(也显示在您的 &lt;option&gt; 中)。

    "^SK Dudar$""SK Dudar 1" 不匹配,因此您找不到匹配项。

    改变

    optionVal = data.match(/SK [A-Z]\w+/g);
    

    optionVal = data;
    

    检查其余的作品,但可能不适用于看起来像附加图像的图像(未提供 html/datatables 数据,因此无法确定)

    或者改变

    column.search(val ? '^'+val+'$' :...
    

    column.search(val ? '^'+val : ''...
    

    (即删除$

    根据该数据列中的其他内容,您可能需要更改搜索正则表达式,例如

    column.search(val ? '^'+val+'\s.?\w' : ''...
    

    还应将“SK Dudar”匹配到“SK Dudar 1”,但不能匹配“SK Dudar 1 2”。

    如果图像不起作用,您可能需要将其移动到不同的列中,但它与 HTML 不匹配,而是在数据表的 column.search API 上匹配。

    【讨论】:

    • 我会先尝试根据您的建议工作。非常感谢!
    • 我设法使用:optionVal = data.match(/SK (([a-zA-Z]\w+) *)+/g); 而不是在column.search() 中使用正则表达式来解决它,因为我的val 会得到一些内联html 代码。
    猜你喜欢
    • 2018-09-18
    • 2021-07-18
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多