代码之家  ›  专栏  ›  技术社区  ›  DeepSpace

覆盖数据表。js搜索行为

  •  0
  • DeepSpace  · 技术社区  · 7 年前

    关于这个问题,这里已经有几个问题了,但是没有一个是关于我的确切情况。

    我有一个数据表,有两列,一列包含文本输入字段,另一列包含选择字段。datatables搜索功能的当前行为是在整个select HTML中进行搜索。我想要的behvior是只搜索所选的选项。

    我知道我们可以覆盖/拦截搜索/筛选事件,即

    $('#mapping-table_filter input', data_table.table().container())
        .off('.DT')
        .on('keyup.DT cut.DT paste.DT input.DT search.DT', function (e) {
           data_table.search(...).draw();
        });
    
    // or 
    
    data_table.on('search.dt', function () {
    
    });
    

    但这并没有起到任何作用 .search 不接受回调。

    JSFIDLE https://jsfiddle.net/0oabx2mr/

    如果搜索“first”、“second”或“third”中的任何一行,这两行仍然可见。我希望能够搜索“second”和“third”,只获取相关行。

    0 回复  |  直到 7 年前
        1
  •  2
  •   user3307073 user3307073    7 年前

    在架构稍有更改的情况下,您的示例可能如下所示:

    var srcData = [
      ['firstOption', 'secondOption', 'thirdOption'],
      ['firstOption', 'secondOption', 'thirdOption'],
      ['firstOption', 'secondOption', 'thirdOption'],
      ['firstOption', 'secondOption', 'thirdOption']
    ];
    
    var dataTable = $('#mytable').DataTable({
      sDom: 't',
      data: srcData,
      columns: [{
        title: 'Options',
        render: (data, type, row) => '<select>'+row.reduce((options, option) => options += `<option value="${option}">${option}</option>`,'')+'</select>'
      }]
    });
    
    var needle = null;
    $.fn.DataTable.ext.search.push(
      (settings, row, index) => $(dataTable.cell(`:eq(${index})`,':eq(0)').node()).find('select').val().match(needle) || !needle
    );
    
    $('#search').on('keyup', event => {
      needle = $(event.target).val();
      dataTable.draw();
    });
    <!doctype html>
    <html>
    <head>
      <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
      <script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
      <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
    </head>
    <body>
      <input id="search"></input>
      <table id="mytable"></table>
    </body>
    </html>
    推荐文章