Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何返回所有列名/标题(并避免“TypeError:table.columns(…)。名称不是函数”)?_Javascript_Jquery_Datatables - Fatal编程技术网

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

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

我有一个非常类似的问题

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

这就是我使用的datatables版本:

 <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']