【问题标题】:Datatables OR search?数据表或搜索?
【发布时间】:2016-04-05 14:58:16
【问题描述】:

我正在使用DataTables jQuery 插件。

如果一个词出现在至少两个特定列之一中,我想搜索该表。

下面的当前代码仅查找单词"word"两个 列中的行。我需要找到该单词在任一列中的行。

$table.DataTable().columns([0,1]).search("word");

我考虑过使用全局搜索并将其他列的可搜索选项设置为 false,但我找不到在运行时更改此选项的方法。

【问题讨论】:

    标签: javascript search datatables


    【解决方案1】:

    搜索所有列

    搜索表格时可以使用正则表达式。

    例如,下面的代码显示的搜索结果在所有列中都包含单词 AngelicaLondon

    var table = $('#example').DataTable();
    
    table
        .search('Angelica|London', true, false)
        .draw();    
    

    有关代码和演示,请参阅this jsFiddle

    搜索特定列

    要搜索特定列,您可能需要使用custom search 功能。

    下面的代码显示了在索引为012 的表数据值中包含单词AngelicaTokyo 的搜索结果。

    var table = $('#example').DataTable();
    
    var terms = ['Angelica', 'Tokyo'];    
    
    // Convert terms to lower case
    $.each(terms, function(index, value){
       terms[index] = value.toLowerCase();
    });
    
    // Enable custom search
    $.fn.dataTable.ext.search.push(
       function (settings, data, dataIndex) {
          var isFound = false;
          $.each(data, function (index, value){         
             // Evaluate only first three data values
             if(index === 0 || index === 1 || index === 2){
                // Convert data to lower case
                value = value.toLowerCase();
                $.each(terms, function(termIndex, termValue){
                   // If data contains the term
                   if (value.indexOf(termValue) !== -1) {
                      isFound = true;
                   }
                   return !isFound;
                });
             }
    
             return !isFound;
          });
    
          return isFound;
       }
    );
    
    // Perform search
    table.draw();
    
    // Disable custom search
    $.fn.dataTable.ext.search.pop();
    

    有关代码和演示,请参阅this jsFiddle

    【讨论】:

    • 这不是他的问题,他只想使用DataTable中的2列
    • @JeanDoux,说得好。如果 OP 想要搜索特定列,则添加了替代(更复杂)的解决方案。
    • 自定义搜索看起来像我需要的,尽管我需要搜索在特定两列中的任何一列中找到的一个(而不是两个)术语。所以我想我不需要代码中的 $.each 部分?其次,如何在运行时启用/禁用自定义搜索?意味着我不希望插件始终应用此自定义搜索,我想在代码中禁用/启用它。
    • @user3599803,$.fn.dataTable.ext.search.pop(); 禁用了自定义搜索,请参阅发布的代码。
    • 好的,所以每次我使用自定义搜索后,我都会从数组中弹出这个函数?因为我不想失去正常的全局搜索。所以我认为我应该将自定义搜索函数存储在一个变量中,然后在需要时推送/弹出该函数。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多