从DataTable搜索

时间:2016-08-04 09:02:09

标签: javascript jquery datatables

https://datatables.net/reference/api/search()#Example

我使用上面的链接作为我搜索的示例,但我的设置完全不同。

<td>
    <div class="plCell_desktop">
        <input type="radio" class="" data-lnk_id="414107671" data-group="RUTH">
        <label for="414107671">RUTH</label>
    </div>
</td>

这是我表格的摘录。

唯一可见的数据是“露丝” 但是当我搜索说“76”时,它仍会带来“露丝” 原因很可能是表格单元格中的信息比“露丝”更多。

好的,我的问题是。你可以强制DataTables从单词的开头搜索。例如(输入“uth”不会带回“Ruth”,但“Ru”会,希望它有意义)。

你能用DataTables进行一种“innerHTML.val()”搜索吗?

3 个答案:

答案 0 :(得分:1)

你能用jQuery吗?

$(".plCell_desktop label").each(function() {
  // Using RexExp matching
  RexExp regex = new RegExp(); // Your regex obj
  if ($(this).val().match(regex)) {
    // Do stuff if it matches
  }

  // Or if you just want to do something if it has a value:
  if ($(this).val()) {
    // ...
  }
});

答案 1 :(得分:1)

  

好的,我的问题是。你能强制DataTables从中搜索   一个字的开头。例如(输入&#34; uth&#34;不会带回来#34; Ruth&#34;,   但是&#34; Ru&#34;希望它有意义。)

是。预先创建自定义过滤器,执行此类过滤。默认&#34;智能搜索&#34;将被自定义过滤器推翻,任何未来的过滤都将通过:

$.fn.dataTable.ext.search.push(function( settings, data, dataIndex ) {
   var term = $('.dataTables_filter input').val().toLowerCase()
   for (var i=0, l=data.length; i<l; i++) {
     if (data[i].toLowerCase().indexOf(term) == 0 ) return true
   }
   return false
})

演示 - &gt;的 http://jsfiddle.net/qxcjzuxa/

正如您可能已经注意到,将dataTables过滤整体区分大小写(仅作为示例)非常容易。过滤器阵列是LIFO结构,您可以在其中放置多个过滤器。如果您因任何原因禁用&#34;单词&#34;的开头,则只需按$.fn.dataTable.ext.search.pop()即可删除过滤条件动态过滤。

答案 2 :(得分:1)

如果您需要在代码中多次访问匹配的标签,您可能希望每次都避免计算正则表达式。一种解决方案是运行一次性预处理,以添加自定义属性。我们称之为isOk

然后,您可以使用标准jQuery选择器选择标签:

$('label[isOk=Y]')

下面是一些演示代码。

var regex = /^RU/;

$('label').each(function() {
  $(this).attr('isOk', $(this).html().match(regex) !== null ? 'Y' : 'N');
});

var res = $('label[isOk=Y]');

// check whether we've selected the correct labels
res.each(function() { console.log($(this).attr('for')); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<td>
    <div class="plCell_desktop">
        <input type="radio" class="" data-lnk_id="414107671" data-group="RUTH">
        <label for="414107671">RUTH</label>
        <input type="radio" class="" data-lnk_id="414107672" data-group="RUTH">
        <label for="414107672">RUTH TOO</label>
        <input type="radio" class="" data-lnk_id="414107673" data-group="RUTH">
        <label for="414107673">NOT REALLY RUTH</label>
    </div>
</td>