【问题标题】:Filtering an exact of string in DataTable JQuery在 DataTable JQuery 中过滤字符串的精确值
【发布时间】:2017-04-27 03:12:36
【问题描述】:

如何在 JQuery Datable 的搜索栏中搜索完全匹配我尝试使用 fnFilter 但它仍然没有返回完全匹配。

  $(document).ready(function() {
    var oTable = $('#datacal_table').DataTable({"order": [[4, "asc"]]});
    oTable.fnFilter("^"+$(this).val()+"$", 4, true);
  });

例如,我只关注搜索“活动”,但结果中也会返回“非活动”字词。我应该怎么做我需要能够只搜索确切的字符串。

编辑

我尝试了 inuka 的链接之一How to search for an exact string in a jQuery DataTable?

我的文本类似乎干扰了搜索,我该如何解决这个问题?我想继续使用我的课文,让它有颜色。

<td id="status">
      <span class = "label {{ getStatusColor($data->status) }}"
       id    = "status_{{ $data->id }}">
       {{ getStatusText($data->status) }}
      </span>
</td>

当我只保留 {{getStatusText}} 时,搜索有效,但当我尝试对其进行分类时,它不会。

<script type="text/javascript">
  $(document).ready(function() {
    var table = $('#datacal_table').DataTable({
      "order": [[4, "asc"]]
    });
    $('.dataTables_filter input', table.table().container())
    .off('.DT')
    .on('keyup.DT cut.DT paste.DT input.DT search.DT', function(e) {
      var term = $.trim(this.value);
      if (term !== ""){
        var termRegExp = new RegExp('^' + $.fn.dataTable.util.escapeRegex(term) + '$', 'i');

        $.fn.dataTable.ext.search.push(
          function (settings, data, dataIndex){
            var isFound = false;
            $.each(data, function (index, value) {
              if (termRegExp.test(value)){ isFound = true; }
              return !isFound;
            });
            return isFound;
          }
        );
      }

      table.draw();

      if (term !== "") {
        $.fn.dataTable.ext.search.pop();
      }
    });
  });
  </script>

【问题讨论】:

标签: javascript jquery datatables


【解决方案1】:

this 帖子中的以下答案将为您提供在 HTML 表格结构中搜索词的答案。

$('#datacal_table').DataTable({
   "columnDefs": [{
      "targets": [4],
      "render": function ( data, type, full, meta ) {
         if(type === 'filter'){
            return $('#datacal_table').DataTable().cell(meta.row, meta.col).nodes().to$().find('span').text();
         } else {
            return data;
         }
      }
   }]
});

根据Datatables documentationcolumnDefs.targets 将为您提供仅匹配指定列名称值的选项。 "targets": [4] 只会关注您的 Status 列下的值。

【讨论】:

    【解决方案2】:

    试试这个代码

    var oTable = $('.datatable').DataTable(); 
    $('.dataTables_filter input').keyup( function () {
          oTable.fnFilter("^"+$(this).val(),0,true,false);
    });
    

    工作链接http://codepen.io/subbu1191/pen/GmrvNd

    1.{string}: String to filter the table on
    2.{int|null}: Column to limit filtering to
    3.{bool} [default=false]: Treat as regular expression or not
    4.{bool} [default=true]: Perform smart filtering or not
    5.{bool} [default=true]: Show the input global filter in it's input box(es)
    6.{bool} [default=true]: Do case-insensitive matching (true) or not (false)
    

    您必须将智能过滤设为 false 才能使正则表达式正常工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      • 2017-12-23
      • 1970-01-01
      • 2014-03-31
      • 1970-01-01
      相关资源
      最近更新 更多