【问题标题】:Datatables - search by string, not substring数据表 - 按字符串搜索,而不是子字符串
【发布时间】:2021-01-26 15:08:02
【问题描述】:

我一直在尝试在数据表中进行搜索以搜索完整字符串,而不是该字符串的子字符串。

我有用户名:Ivan Test 和 Test Users 如果我搜索“iv”或“Iv”结果,我希望只有“Ivan Test”,但我得到了两个用户,因为第二个用户包含在他的字符串“Test UsIVer”中

我试过这个: $('#TablicaRacuni').DataTable().search($(this).val(), false, false, false); 和这个 $('#TablicaRacuni').DataTable().search("^" + $(this).val() + "$", true, false, true).draw(); 使用第二个函数时,搜索输入框中会出现 ^ 和 $ 的错误,如下所示:

真假的所有随机组合,无法让它完全按照我的意愿工作。

打印表格的Stock函数: $('#TablicaRacuni').DataTable();

不必是特定的列搜索,我希望所有列都可以搜索,例如如果我输入“d”,我希望所有柴油账单和所有用户都以“d”作为首字母。

【问题讨论】:

    标签: javascript jquery datatables


    【解决方案1】:

    您可以使用search plug-in 拦截搜索(过滤)事件,然后应用您自己的过滤逻辑。该插件已经可用 - 您无需添加它。

    以下是“开头为”的示例,同时假设搜索不区分大小写:

    $(document).ready(function() {
    
      $('#example').DataTable( {
        // your normal initialization options here
        // no need for any special search options
      } );
      
      $.fn.dataTable.ext.search.push(
        function( settings, searchData, index, rowData, counter ) {
          var match = false;
          var searchTerm = settings.oPreviousSearch.sSearch.toLowerCase();
          searchData.forEach(function (item, index) {
            if (item.toLowerCase().startsWith(searchTerm)) {
              match = true;
           }
          } );
          return match;
        }
      );
    
    } );
    

    假设搜索词输入到标准全局搜索字段中,由 DataTables 开箱即用提供。我们从settings获取用户输入的搜索词。

    每个searchData 代表一行数据,作为一个值数组 - 因此我们遍历每个值以寻找匹配项。

    (如果您想将其更改为“完全匹配”,您将相应地更改if 条件。这里唯一的缺点是用户体验可能有点令人惊讶。每次击键都会导致重新过滤数据。因此,您可能会发现每一行都消失了,直到您为某个字段输入了完全匹配的内容。在这种情况下,搜索“提交”按钮可能会提供更好的用户体验。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-04
      • 2014-01-07
      • 1970-01-01
      • 2019-10-06
      • 2017-02-09
      • 2011-07-04
      • 2013-04-11
      相关资源
      最近更新 更多