【问题标题】:How to iterate through all column headers in jQuery Datatables如何遍历 jQuery Datatables 中的所有列标题
【发布时间】:2020-11-06 22:45:53
【问题描述】:

我在 Datatables 中使用“fnDrawCallback”来获取所有列标题名称 (),因为我正在使用下面的代码

"fnDrawCallback": function () {
    table.column().every( function () {
        var data = this.data();
        var title = table.columns().header();

        console.log($(title).html());
    } );

我可以获得第一列的列标题名称。我想知道如何遍历表中的所有列并获取所有标题()名称?

【问题讨论】:

    标签: jquery datatables iterator datatables-1.10 jquery-datatables-editor


    【解决方案1】:

    我知道的最简单的方法是在 drawCallback 选项中使用一些 jQuery:

    <script type="text/javascript">
    
      $(document).ready(function() {
    
        $('#example').DataTable( {
    
          "drawCallback": function ( settings ) {
            $('#example thead tr th').each(function() {
              console.log( $(this).html() );
            }); 
          }
    
        } );
    
      } );
    
    </script>
    

    我使用的是更新的 drawCallback,而不是旧的旧版 fnDrawCallback(但两者都可以)。


    请注意:在您的问题中,您使用的是table.column().every( function () {...}。在您的示例中,我看不到您如何定义 table 变量。因此,如果我建议的方法不合适,也许您可​​以编辑您的问题以显示您使用 fnDrawCallback 的上下文。


    更新

    如果你想根据列标题的名称隐藏一列或多列,那么你可以拿上面的代码修改如下:

    <script type="text/javascript">
    
      $(document).ready(function() {
    
        $('#example').DataTable( {
    
          "drawCallback": function ( settings ) {
            var tbl = $('#example').DataTable();
    
            var colIndex = 0;
            $('#example thead tr th').each(function() {
              var colHeading = $(this).html();
              if (colHeading === 'Office' || colHeading === 'Age') {
                tbl.columns( colIndex ).visible( false );
              }
              colIndex += 1;
            }); 
          }
    
        } );
    
      } );
    
    </script>
    

    在上面的例子中,我有一个表格,当表格被绘制时,“Office”和“Age”列被隐藏了。

    【讨论】:

    • 谢谢。这就是我一直在寻找的。你能看看我发布的答案吗
    【解决方案2】:
      var table = $('#contracts').DataTable( {
      
    
      "drawCallback": function ( settings ) {
    
    
                        $('#contracts thead tr th').each(function() {
    
            // var title = table.column().th();
            // table.column( this ).column;
                
               var head = $(this).text();
                          console.log(head);
    
           
                if ($(this).text() == "" ) {
                                                console.log("abc");
    
                                     table.column().visible(false);
    
                                }
    
                                 else  {
                              
                                      table.column().visible( true );
                            
                              
                      }
            }); 
          }
    });
    

    @andrewjames 它按预期工作,但不会根据条件隐藏列。它只是隐藏了表格中的第一列

    【讨论】:

    • 我不确定我是否理解您在此处提供的代码 - 它不会运行。它将在"drawCallback": function ( settings ) { 行引发 JavaScript 错误,因为该行不在 DataTable 定义中。但是,我试图在我的回答中提供一些注释 - 我希望它们有所帮助。
    • 更一般地说,与其通过写答案来提出后续问题,不如写一个全新的问题(或编辑您的问题)。
    • @andrewjames 绝对!你是对的,这是我这边的错误,它必须在数据表定义中。感谢您的帮助
    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    相关资源
    最近更新 更多