【问题标题】:filter table data based on drop down values of first column only in DataTables仅根据 DataTables 中第一列的下拉值过滤表数据
【发布时间】:2015-02-13 07:14:42
【问题描述】:

下面提到了数据表网站上提到的所有列的选择选项的功能。我如何让它只过滤第一列下拉值的表格数据,并将选择下拉列表放在其他地方而不是通常的标题部分。see link for example

initComplete: function () {
    var api = this.api();

    api.column().indexes().flatten().each( function (i) {
        var column = api.column(i);
        var select = $('<select><option value=""></option></select>').appendTo('$selectTriggerFilter').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 ) {
            select.append( '<option value="'+d+'">'+d+'</option>' )
        } );
    } );
} 

我正在使用以下代码。一旦我删除 dom 选项,选择选项就会出现,但不是没有 dom。

$(document).ready(function() {
     $('#tableTrigger').DataTable({

    "lengthMenu": [ [10, 25, 50, 100, -1], [10, 25, 50, 100, "All"] ],
    searching: false,
    "scrollY": "200px",
    "dom": 'frtipS',
    "deferRender": true,

    initComplete: function () 
    {
        var api = this.api();

        api.columns().indexes().flatten().each( function ( i ) 
                {
                            if(i == 0){ //Create just one SelectBox
                                var select = $('<select class='+i+'><option value=""></option></select>')
                                            .appendTo( '#selectTriggerFilter')
                                            .on( 'change', function () {

                                        var val = $(this).val();
                                        column( i ).search( val ? '^'+$(this).val()+'$' : val, true, false ).draw();
                                    });

                                column( i ).data().unique().sort().each( function ( d, j ) {
                                    select.append( '<option value="'+d+'">'+d+'</option>' );
                                } );
                        }
                            else return;
               });
    } 

  }); 
});

【问题讨论】:

    标签: javascript jquery datatables jquery-datatables datatables-1.10


    【解决方案1】:

    原因

    您的代码存在一些问题:

    • searching 不应设置为 false 否则 search() 函数将不起作用
    • column 变量未定义

    解决方案

    以下是更正的代码。

    $(document).ready(function() {
       $('#tableTrigger').DataTable({
            "lengthMenu": [
                [10, 25, 50, 100, -1],
                [10, 25, 50, 100, "All"]
            ],
            "scrollY": "200px",
            "dom": 'rtipS',
            // searching: false,
            "deferRender": true,
            initComplete: function () {
               var column = this.api().column(0);
               var select = $('<select class="filter"><option value=""></option></select>')
                   .appendTo('#selectTriggerFilter')
                   .on('change', function () {
                      var val = $(this).val();
                      column.search(val ? '^' + $(this).val() + '$' : val, true, false).draw();
                   });
    
               column.data().unique().sort().each(function (d, j) {
                   select.append('<option value="' + d + '">' + d + '</option>');
               });
            }
        });
    });
    

    备注

    • 我在"dom": 'frtipS' 中省略了f,因为我认为您最初想通过将searching 设置为false 来排除它。如果您想要搜索框和下拉过滤器,请包括 f

    • 如果您在dom 属性中省略了l,那么设置lengthMenu 是没有意义的。

    演示

    请参阅this jsFiddle 以获取更正代码的演示。

    【讨论】:

      【解决方案2】:

      您可以将搜索部分放置在 dom 中的任何位置。然后你的事件调用(点击,选择,keyup)。像下面这样调用 serach api。

      var dTable= $("example").DataTable();
      dTable.columns(i).search(v).draw();
      

      这里 i 是您的数据表列索引,v 是搜索值。

      【讨论】:

      • 感谢 Arka 的回复,请查看我在编辑中使用的内容
      猜你喜欢
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      • 2017-08-12
      • 1970-01-01
      • 2013-12-06
      • 2013-12-24
      相关资源
      最近更新 更多