使用 jquery 的数据 tables 插件动态设置 table 标题 - 从数据 object 获取标题

dynamically set table titles with jquery's Datatables plugin - get titles from data object

我正在寻找一种动态设置 table 标题的方法。 有一个执行数据库查询的搜索表单,每次都会根据用户选择获得不同的 data-set。

现在 html 中的标题是 hard-coded。

这就是我设置 table:

的方式
<table id="searchResults" class="display table table-striped table-bordered" cellspacing="0" width="100%">
  <thead>
    <tr>
      <th>agentId</th>
      <th>confirmTime</th>
      <th>name</th>
      <th>amount</th>
      <th>currency</th>
      <th>amountUSD</th>
    </tr>
  </thead>

  <tfoot>
    <tr>
      <th>agentId</th>
      <th>confirmTime</th>
      <th>name</th>
      <th>amount</th>
      <th>currency</th>
      <th>amountUSD</th>
    </tr>
  </tfoot>
</table>

javascript:

Api.getDeposits(formData).then(function(res){
  $('#searchResults').dataTable( {
      "data": res,
      "scrollX": "100%",
      "columns": [
          { "data": "agentId" },
          { "data": "confirmTime" },
          { "data": "name" },
          { "data": "amount" },
          { "data": "currency" },
          { "data": "amountUSD" }
      ]
  });
});

示例数据:

[{
  "agentId": 70,
  "amount": 250,
  "amountUSD": 250,
  "confirmTime": "2015-04-28 10:49:00",
  "currency": "USD",
  "email": "name@mail.ru",
  "name": "some name",
  "paymentMethod": "Credit Card",
  "status": "approved"
}]

我想根据从服务器获取的数据设置tfoot,thead, 所以很多情况我只有一个模板

嗯。你的问题没有完全意义。如果可以对列进行硬编码,为什么不能对标题进行硬编码?我的意思是,如果 email 字段是静态的,那么标题 email 也会是静态的吗?

无论如何,我认为您两者都想要 - 一个模板,您可以在其中传递任何 JSON 以及任意数量的字段和标题/字段名称。以下模板可以做到这一点:

<table id="example"></table>

脚本:

$.getJSON('url/to/json/data', function(json) {
    var keys = Object.keys(json['data'][0]),
        columns = [];
    for (var i=0;i<keys.length;i++) {
        columns.push(
            { data: keys[i], title: keys[i] }   
        );
    }
    var table = $('#example').DataTable({
        data : json.data,
        columns : columns
    });
});

这需要 any JSON 和 any 个字段表单 { 'data' : [...] } 并将其添加到数据表中,字段名称作为标题,字段 objects 作为数据。

如果您的 JSON 在表格

{ "agents": [
  {
    "agentId": 70,
    ...
  }, ...
]

然后只需将 data 引用重命名为 agents ;

$.getJSON('url/to/json/data', function(json) {
    var keys = Object.keys(json['agents'][0]),
        columns = [];
    for (var i=0;i<keys.length;i++) {
        columns.push(
            { data: keys[i], title: keys[i] }   
        );
    }
    var table = $('#example').DataTable({
        data : json.agents,
        columns : columns
    });
});

如果您的 JSON 是普通数组 [{ ... }, { ... }] 则完全跳过 data 引用:

$.getJSON('url/to/json/data', function(json) {
    var keys = Object.keys(json[0]),
        columns = [];
    for (var i=0;i<keys.length;i++) {
        columns.push(
            { data: keys[i], title: keys[i] }   
        );
    }
    var table = $('#example').DataTable({
        data : json,
        columns : columns
    });
});