关于 javascript:Datatables Filtering – 智能搜索中的完全匹配

Datatables Filtering - an exact match in smart seach

我想坚持使用数据表所具有的智能搜索(我键入时搜索)。问题是,我的专栏之一显示了以下值:人员和人员。因此,拥有数百万条记录,当我键入 "person" 时,我很难挖掘到 "person",而该列仅显示 "personnel"。

我不只想要完全匹配。这会让我在某些情况下输入全名:"person-xyz-123"。

有没有办法让我在引号中指定说"人"并告诉数据表我只想在我输入引号时进行精确搜索并且仍然坚持我的正常搜索?

咖啡脚本文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$(xyz).ready ->
    $('#xyz').dataTable
      bProcessing: true
      bServerSide: true
      sDom:"<"top"T>rt<"bottom"lip><"clear">"
      oTableTools:
        sSwfPath:"../TableTools-2.1.5/media/swf/copy_csv_xls_pdf.swf"
      sAjaxSource: $('#xyz').data('source')
    .columnFilter aoColumns: [
      { type:"text" },
      { type:"text" },
      { type:"text" },
      { type:"text" },
      { type:"text" },
      { type:"text" },
      { type:"text" },
      { type:"text" },
      {
      type:"select"
      values: [
        {"value": 0,"label":"Failed"},
        {"value": 1,"label":"Completed"},
        {"value": 2,"label":"Processing"}
      ]
      }
    ]
    return


(我假设使用 1.9 API,因为这似乎是您在问题中使用的。)

可以做你想做的事,但这意味着修改服务器端代码来响应你作为 sAjaxSource 选项提供的 URL 的请求。它必须执行这些检查:

  • 如果 sSearch 参数(添加到 sAjaxSource URL)包含像 "person" 这样的双引号中的术语,则删除双引号并精确执行匹配。

  • 否则执行部分匹配。

  • 有关 DataTables 发送到服务器的内容及其预期内容的完整文档在这里。


    我创建了这个辅助函数来解决我的问题:

    1
    2
    3
    4
      def filter_helper(data)
        return"#{data[:name]} = :search", search:"#{params[data[:dt_name]].gsub!(/^"|"?$/, '') }" if"#{params[data[:dt_name]]}".chars.first =="""
        return"
    #{data[:name]} like :search", search:"%#{params[data[:dt_name]]}%" if"#{params[data[:dt_name]]}".chars.first !="""
      end