【问题标题】:How to get name of datatable column?如何获取数据表列的名称?
【发布时间】:2015-12-12 10:20:31
【问题描述】:

我正在使用 DataTable 1.10.9(来自 https://datatables.net)。数据表的列是在 javascript 的初始化步骤中定义的,每列都有一个唯一的名称,例如:

var table = $('#example').DataTable({
            columns: [
                { name: 'first-name' },
                { name: 'last-name' },
                { name: 'position' },
                { name: 'location' },
                { name: 'salary' }
            ]
        });

我知道我可以通过我给它的名称从表中获取列,但我似乎无法找到如何从列对象中找到列的名称。 (我希望组件的当前状态是可能的。)例如:

        table.columns().every(function() {
            //I'd want to see what the name of this column is, something like:
            console.log(this.name()); //will throw an exception since no such function exists
            //or
            console.log(this.name); //will output 'undefined'
        });

获取名称的正确函数或属性是什么?

【问题讨论】:

    标签: javascript jquery datatables


    【解决方案1】:

    您可以通过 table.settings().init() 检索初始化选项 - 并且通过这种方式 columns 定义:

    var columns = table.settings().init().columns;
    

    单击单元格/<td> 时,您可以通过以下方式找到列索引(隐藏列的最佳做法):

    var colIndex = table.cell(this).index().column;
    

    单击处理程序的示例,当单击单元格时提醒相应的column.name

    $("#example").on('click', 'td', function() {
        //get the initialization options
        var columns = table.settings().init().columns;
        //get the index of the clicked cell
        var colIndex = table.cell(this).index().column;
        alert('you clicked on the column with the name '+columns[colIndex].name);
    })
    

    您的 every() 示例将是

    var columns = table.settings().init().columns;
    table.columns().every(function(index) { 
        console.log(columns[index].name);
    })  
    

    演示 -> http://jsfiddle.net/6fstLmb6/

    【讨论】:

    • 接受这个作为 every() 的一部分将适用于我在问题中给出的示例。
    • 我不会是唯一一个发现他们的 api 如此落后的人吧?
    • 我需要table.settings().init().columnDefs 而不是table.settings().init().columns
    • 您现在可以获得colIndex,如下所示:var colIndex = table.column(this).index(); 谢谢您的休息。
    • 有没有“init”的解决方案?这会导致固定列出现问题
    【解决方案2】:

    下面的代码对我有用

    this.api().columns().every(function() {
      console.log( this.header().textContent )
    })
    

    您也可以为特定的列名添加特定的 html 类,例如拥有该类

    this.api().columns(".myColumnClass").every(function() {
      console.log( this.header().textContent )
    })
    

    【讨论】:

      【解决方案3】:

      根据API document,以下内容应该适合您:

      var tableColumns = [{
          name: 'first-name'
      }, {
          name: 'last-name'
      }, {
          name: 'position'
      }, {
          name: 'location'
      }, {
          name: 'salary'
      }]
      
      var table = $('#example').DataTable({
          tableColumns
      });
      
      table.columns().every(function (index) {
      
          console.log(tableColumns[index].name);
      
      });
      

      【讨论】:

      • 这可能行得通,但我希望有一个更以 DataTable 为中心的访问解决方案 - 遍历列的类只有 DT 对象引用,它无法访问 tableColumns数组。
      【解决方案4】:

      您可以尝试使用另一种方法。 “index”变量是你的一列。此方法将获取表格的 thead 列并读取标签内的文本。

      dataTable.column(index).header().textContent

      【讨论】:

      • 文本内容与名称不匹配。
      【解决方案5】:

      Documentation 表明columns().every()this 设置为当前列的column() 对象。对列对象的进一步检查表明它有一个column().data() 方法,该方法将列包含的数据作为值数组返回。这应该提供您需要的数据。

      【讨论】:

      • 操作要求提供列名,而不是数据 :)
      猜你喜欢
      • 1970-01-01
      • 2015-09-28
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 2019-06-03
      • 1970-01-01
      相关资源
      最近更新 更多