如何返回所有列名/标题(并避免“TypeError:table.columns(…)。name不是函数”)?

我对这个问题有一个非常类似的问题。

我创建一个数据表,然后用户可以使用搜索function,单击一个按钮,然后所选数据将被发送到另一个function,在那里进一步处理。 初始化表工作正常,同时发送所选数据按预期工作 。 但是,我无法正确访问列名称。

这是我使用的数据表版本:

 

一点背景:通过单击链接( #calculate ),创建一个表,列标题看起来很好,例如:

在此处输入图像描述

然后,用户可以选择条目(这里是88 ),然后使用第二链接( #send_data )发回过滤后的数据。 用于初始化列标题的数据如下所示(取自console.log(data.columns); ):

 […] 0: Object { name: "C1", title: "C1", sName: "C1", … } 1: Object { name: "C2", title: "C2", sName: "C2", … } length: 2 __proto__: Array [] 

我也可以访问table.columns() ,但是,当我尝试table.columns().names()table.columns().title()我收到

TypeError:table.columns(…)。names不是函数。

如何访问和传递显示的列标题,即下面的代码中的col_names是什么?

相关代码如下:

  $(document).ready(function() { var table = null; $('#calculate').bind('click', function() { $.getJSON('/_get_table', { a: $('#a').val(), b: $('#b').val() }, function(data) { console.log(data.columns); $("#elements").text(data.number_elements); if (table !== null) { table.destroy(); table = null; $("#a_nice_table").empty(); } table = $("#a_nice_table").DataTable({ data: data.my_table, columns: data.columns }); }); return false; }); $('#send_data').bind('click', function() { //console.log(table.columns()); //console.log(table.columns().title()); //console.log(table.columns().names()); $.getJSON('/_selected_data', { sel_data: JSON.stringify(table.rows( { filter : 'applied'} ).data().toArray()), col_names: //what goes here? }, function(data) { alert('This worked') }); return false; }); });  

这是一个可能的解决方案:

 table.columns().header().toArray().map(x => x.innerText) 

我使用了DataTable的API文档。 用innerHTML替换innerText也有效。

从HTML表中提取表头看起来有点像hackish; 根据你的代码,我认为你可以做这样的事情; 在初始化表变量的部分,只需添加一行以保留您获得的JSON数据中的列列表:

 table = $("#a_nice_table").DataTable({ data: data.my_table, columns: data.columns }); table.columns = data.columns; // dynamically add a property, store columns 

然后你应该能够做到:

 col_names: JSON.stringify(table.columns) 

或者它的一些变体,具体取决于data.columns包含的数据结构data.columns (如果它是一个简单的数组,它应该可以正常工作)。