【问题标题】:DataTables with (filter by) from json data来自 json 数据的具有(过滤条件的)数据表
【发布时间】:2017-02-09 12:48:58
【问题描述】:

我正在尝试让我的过滤器与来自服务器的 json 数据一起工作,有人可以帮我这样做吗?

我需要按地点过滤:全部、EUA、中国、西班牙

我正在使用:jquery.dataTables.js 来自:https://datatables.net

html:

  <div class=" dashboard">
  <div class="col-md-8 no-padding">
     <div class="form-group col-md-4 no-padding">
      <select class="form-control" id="sel1" >
        <option value="Filter by">Filter by country </option>
         <option value="All">All</option>
         <option value="First name">China</option>
         <option value="Last name">EUA</option>
         <option value="Last name">Spain</option>
      </select>
    </div>
  </div>

<br>
<br>
<table id="example" class="display" width="100%" cellspacing="0">
<thead>
        <tr>
            <th>First name</th>
            <th>Place</th>

        </tr>
    </thead>
</table>

jquery:

    $(document).ready(function() {
       var dt = $('#example').dataTable();
       dt.fnDestroy();
    } );

   $(document).ready(function () {
  var url = 'http://www.json-generator.com/api/json/get/crcCiZXZfm?indent=2';
  var table = $('#example').DataTable({
        ajax: url,
    columns: [
        { data: 'name' },
        { data: 'place' }
    ]
  });
});

jsfiddle: http://jsfiddle.net/ntcwust8/120/

【问题讨论】:

  • 不确定当您选择按名字过滤时会发生什么,所有记录都有名字...
  • 对不起,你是对的,我重新提出我的问题我需要过滤器在每个地方工作,所以如果中国过滤器只显示来自中国的数据如果我选择西班牙显示来自西班牙等的数据......,理解?谢谢。
  • 就是这样,但是我需要申请一个带有选择的发布的样本,你能帮我吗?谢谢。

标签: javascript jquery json ajax datatables


【解决方案1】:

http://jsfiddle.net/f7debwj2/

将以下代码添加到您的 document.ready() 中:

$('#sel1').change(function() {

  if (this.value === "All") {
    table
      .columns(1)
      .search('')
      .draw();
  }  

  else {
    table
      .columns(1)
      .search(this.value)
      .draw();
     }

});

所以基本上你告诉你的 SELECT 元素等待它的值被改变。为了显示 ALL,将 .search() 参数设置为空字符串,这将返回 ALL。否则,下拉菜单将使用您的 SELECT 中选定的 VALUE(不是文本!)在 column(1) 上触发表格搜索并重绘您的表格。

注意:我还更改了您的 SELECT 的值属性,因为它们一开始是错误的。

关于 column().search() 的 DataTables 文档可以在 HERE 找到。

【讨论】:

  • if (this.value === "All" || this.value === "Filter by") 会更好。
  • 没错,我错过了。好吧,基本上简单地删除“过滤依据”选项会有点“干净”,因为它不是真正的选项。我会为 SELECT 元素添加一个标签,并让第一项为“All”。现在,选择“过滤依据”显然会返回 0 个结果。更新小提琴:jsfiddle.net/f7debwj2/1
  • 谢谢,这就是我要找的,非常感谢,最后一个问题,我不知道为什么当我在我的代码中选择值时,值会进入搜索框,有什么办法让它不去那里吗?最有趣的部分是在 jsfiddle 上没有发生,但在我的代码中发生在本地
  • 这确实很有趣。一旦对 search() 进行 API 调用,数据表可能正在更新自己的搜索文本框。如果您在小提琴和本地使用相同的数据表版本,您是否进行了比较?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 2012-12-21
  • 2019-10-18
相关资源
最近更新 更多