【问题标题】:Jquery datatables does not display the column headersJquery 数据表不显示列标题
【发布时间】:2015-09-29 01:31:44
【问题描述】:

这与问题here 相关联。但是,我的情况有点不同。我想从另一个问题here 中实现相同的数据表示例。如您所见,您必须传递列名才能初始化表头,如下所示

 "columns": [
        { "data": "name" },
        { "data": "position" },
        { "data": "office" },
        { "data": "extn" },
        { "data": "start_date" },
        { "data": "salary" }
    ]

问题是我不会事先知道标题名称,因为它们会改变。当我使用第三个变量从 ajax 获取数据时,我尝试初始化列名(如下所示)(请参阅“注意这一行”的位置,但这不起作用。

            //PAY ATTENTION TO THIS LINE
            var columnsHeaders = [];


      var ab = $('#dynamicScenarioTable').DataTable({
              "bDestroy": true,
              "dom": 'T<"clear">lfrtip',
              "ajax": {
                    "type": "POST",
                    "url": "dynamicScenario.htm",
                    "data": tags,
                    "dataType": "json",
                    "dataSrc": function(json){
                          //PAY ATTENTION TO THIS LINE
                          columnsHeaders.push({"data": json.header });
                          return json.vals;
                    },
                    "error": function(exception)
                    {
                       displayMessageOnError();
                    }
               },  
                //PAY ATTENTION TO THIS LINE
               "columns":  [columnsHeaders],

               tableTools: tableDefaultS.tableTools
      });

有什么想法吗?

【问题讨论】:

  • 你为什么不知道数据?它可以是来自某种形式的动态输入,也可以是 AJAX 请求的一部分。你应该能够得到标题。
  • 因为列字段的数量以及它们的名称都会改变。我可以在 json 文件中循环查找它们的编号,正如我在上面的示例中所展示的那样。但是,我不知道如何在之后将其分配给列字段
  • 如果标题在变化,那么数据也在变化。为什么不直接重新创建表?
  • 这是否意味着我必须通过附加 tr 和 tds 来动态构建表,然后调用 datatables?
  • 不一定,可能还有其他方法。只是给你其他选择。

标签: javascript jquery ajax datatable


【解决方案1】:

您可以将数据源属性添加到构建在表头上的 TH 标记中。然后,您可以让 jQuery 读取这些并构造数组以发送到 DataTable 构造函数。

<tr>
    <th data-source="name">Name</th>
    <th data-source="position">Postion</th>
    <th data-source="start_date">Start Date</th>
</tr>

然后在你的 JavaScript 中做这样的事情来构造数组

var columnsHeaders = [];
$("#dynamicScenarioTable thead th").each(function() {
    colmnsHeaders.push(
        {
            data : $(this).data("source")
        }
    );
});

// construct your DataTable after this

【讨论】:

  • 我不能这样做,因为我事先既不知道名称也不知道列数。
  • 那么是什么构建了表格的列标题?
  • 好吧,我可以知道 ajax 响应中的标头。您的代码类似于我上面粘贴的代码。我可以将标题推送到 ajax 中的数组,但由于某种原因,我无法将此数组分配给数据表“列”设置。可能是因为它的异步
  • 您的示例只是试图告诉 DataTables 列的绑定是什么。它没有创建标题列。我实际上只是查看了DataTable docs,看起来您可以使用 DataTables 将自动读取的 html5 属性 data-class-name ,这将否定我上面的整个示例。在从 ajax 调用更新数组之前,您发送到 DataTables 构造函数的对象已经绑定。它只看到空数组,会产生 js 错误。
  • 在我的 ajax 请求之前,我既不知道标题名称,也不知道它们的计数。我只能在 ajax 响应中知道此信息,因为我应该已经为数据表的“列”功能分配了一些值,所以构建表的 th 为时已晚。如果我想遵循您的方法,我需要先使用 ajax 获取数据,然后构建与 nuking 表相同的表并重新创建它,但我的目的是在与上述相同的 ajax 调用中构建表。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
相关资源
最近更新 更多