Javascript 如何返回所有列名/标题(并避免“TypeError:table.columns(…)。名称不是函数”)?
我有一个非常类似的问题 我创建了一个datatable,然后用户可以使用搜索功能,单击一个按钮,然后所选数据将被发送到另一个功能,在那里它将被进一步处理。初始化表工作正常,同时发送选定的数据。但是,我无法正确访问列名 这就是我使用的datatables版本:Javascript 如何返回所有列名/标题(并避免“TypeError:table.columns(…)。名称不是函数”)?,javascript,jquery,datatables,Javascript,Jquery,Datatables,我有一个非常类似的问题 我创建了一个datatable,然后用户可以使用搜索功能,单击一个按钮,然后所选数据将被发送到另一个功能,在那里它将被进一步处理。初始化表工作正常,同时发送选定的数据。但是,我无法正确访问列名 这就是我使用的datatables版本: <script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js" type="text/javascript"></script&g
<script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js" type="text/javascript"></script>
但是,当我尝试接收table.columns.names或table.columns.title时,我也可以访问table.columns
TypeError:table.columns…名称不是函数
如何访问和传递显示的列标题,即下面代码中的列名称
相关代码如下所示:
<script type="text/javascript">
$(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;
});
});
</script>
以下是一个可能的解决方案:
table.columns().header().toArray().map(x => x.innerText)
我使用了来自的API文档。用innerHTML替换innerText也能起作用。从HTML表中提取表头似乎有点老练;根据你的代码,我认为你可以做这样的事情;在初始化表变量的部分,只需再添加一行,以保留从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中包含的数据结构的类型。如果它是一个简单的数组,它应该可以正常工作。我必须使用DataTables.settings方法获取所有列名的数组 我最后做了以下几件事:
// Initialise your table and set up column names.
const yourTable = $('#yourTableID').DataTable({
columns: [
{name: 'FirstName'},
{name: 'LastName'},
]
});
// Get your table's settings
const settings = yourTable.settings();
// Map through the settings.aoColumns object and return each column.name
const columnNames = settings.aoColumns.map((column) => {
return column.name;
});
console.log(columnNames) // prints: ['FirstName', 'LastName']
你在用什么?如果是这样的话,请看一看。@FilipMilovanović:这适用于console.log,谢谢。然后它包含例如aria label=C1:activate以对列进行降序排序。知道我现在如何为每一列提取所有这些aria标签条目吗?或者我必须发送它,然后使用例如table.columns.header.html,然后自己解析它吗?是的,你们可以自己解析——这会给你们一个标题文本数组:table.columns.header.mapfunctionh{return h.innerHTML}试试这个:$table.columns.header.find'th'。mapfunctionidx,e{return e$e.attr'aria-label';}@colin0117:谢谢,以下内容似乎有效:col_name:JSON.stringifytable.columns.header.mapfunctionh{return h.innerHTML}.toArray。请随意添加此作为答案。干杯,效果很好。尽管似乎没有更直接的方法来做这件事,但我仍然感到奇怪…@Cleb我同意。API文档中没有关于直接获取标题的内容:\是的,确实感觉有点不舒服。这种方法也适用,但不应使用table.columns,而应使用table.column_名称,因为列是保留字。问题是我总是得到一个类型为0:Object{title:C1,sTitle:C1}1:Object{title:C2,sTitle:C2}的字典,我必须从中过滤标题部分。然后我不确定是否保留了列的顺序,但可以使用orderedDict。我投了更高的票,因为这可能有效,但我还需要一些测试。。。
// Initialise your table and set up column names.
const yourTable = $('#yourTableID').DataTable({
columns: [
{name: 'FirstName'},
{name: 'LastName'},
]
});
// Get your table's settings
const settings = yourTable.settings();
// Map through the settings.aoColumns object and return each column.name
const columnNames = settings.aoColumns.map((column) => {
return column.name;
});
console.log(columnNames) // prints: ['FirstName', 'LastName']