检查当前是否通过搜索过滤了DataTables元素

时间:2019-06-19 19:39:08

标签: jquery filter datatables

我有一种情况需要确定当前是否通过搜索过滤了jQuery-DataTables。

有没有办法检查这个?

2 个答案:

答案 0 :(得分:0)

好的,我想出了一种方法。基本上我正在检查搜索输入是否有值。

if($('#myIdnameHere').find('input[type=search]').val() == ''){
    //then I know that it isn't filtered.
}

答案 1 :(得分:0)

您可以检查搜索输入的value。但是DatatTables库提供了更好的解决方案。

要获取全局搜索查询,可以使用不带参数的search()方法并比较返回的字符串:

let query = table.search();
console.log(query); // outputs a string

但是还有其他一些选项可以在DataTables中执行数据搜索,例如列搜索。使用列搜索,您可以对每个列进行单独查询,从而执行更复杂的搜索。这些查询不会出现在搜索输入中,也不会由DataTables-Object的search()方法返回。要获取列查询,您可以遍历所有列并利用search()方法读取当前查询值:

let queries = [];
let columns = table.columns().indexes();
for (let i = 0; i < columns.length; i++) {
  queries.push(table.column(i).search());
}
console.log(queries); // outputs an array of strings

示例:

$(document).ready(function() {
  let table = $('#example').DataTable();
  
  $('#get-queries').on('click', function(event){
    event.preventDefault();
    
    // get and output global query
    let query_global = table.search();
    console.log('global query:');
    console.log(query_global);
    
    // get and output column queries
    let query_columns = [];
    let columns = table.columns().indexes();
    for (let i = 0; i < columns.length; i++) {
      query_columns.push(table.column(i).search());
    }
    console.log('column queries:');
    console.log(query_columns);
  });
  
  $('#custom-search-1').on('click', function(event){
    event.preventDefault();
    // perform global query (and draw data)
    table.search('Alpha').draw();
  });
  
  $('#custom-search-2').on('click', function(event){
    event.preventDefault();
    // perform different queries on columns
    table.columns(0).search('Alpha');
    table.columns(1).search('Test');
    // draw data
    table.draw();
  });

  $('#reset').on('click', function(event){
    event.preventDefault();
    // reset global query
    table.search('');
    // reset column queries
    table.columns().search('');
    // draw data
    table.draw();
  });

});
#get-queries {
  font-weight: bold;
  color: green;
}

#custom-search-1,
#custom-search-2 {
  font-weight: bold;
  color: orange;
}

#reset {
  font-weight: bold;
  color: red;
}
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="//cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<link href="//cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css" rel="stylesheet"/>

<button id="get-queries">Get queries</button> / 
<button id="custom-search-1">Search global</button>
<button id="custom-search-2">Search in columns</button> / 
<button id="reset">Reset</button>

<hr>

<table id="example">
  <thead>
    <tr><th>Name</th><th>Description</th></tr>
  </thead>
  <tbody>
    <tr><td>Test-1</td><td>Test 1234</td></tr>
    <tr><td>Test-3</td><td>I dont know!</td></tr>
    <tr><td>Test-2</td><td>Another...</td></tr>
    <tr><td>Alpha-1</td><td>Apple Test</td></tr>
    <tr><td>Alpha-2</td><td>Banana Test</td></tr>
    <tr><td>Alpha-3</td><td>Coconut</td></tr>
    <tr><td>Beta-1</td><td>Beta</td></tr>
    <tr><td>Beta-2</td><td>Not Alpha</td></tr>
  </tbody>
</table>