【问题标题】:jQuery DataTables hide column without removing it from DOMjQuery DataTables 隐藏列而不将其从 DOM 中删除
【发布时间】:2012-12-31 14:42:28
【问题描述】:

我需要隐藏一列,使其不显示在 jquery 数据表中。 当我使用 bVisible 属性隐藏列时,它会从 DOM 中消失。

我想将列的表格单元格的显示属性设置为无,以便值不会出现在视图中,但它们仍应存在于 DOM 中,因为我隐藏的列唯一地标识了行,我需要知道行选择的唯一 ID。如何做到这一点。

我正在使用服务器端分页的 aaData 属性填充表格。

查看了这个问题,但这些选项将其从 DOM 中删除。 jquery datatables hide column

【问题讨论】:

    标签: jquery css dom datatables


    【解决方案1】:

    您应该将classNamecolumnDefscolumns 一起使用,

    像这样在你的 CSS 中定义 hide_column

    .hide_column {
        display : none;
    }
    

    您有两种方法来分配 .hide_column 类:

    使用columnDefs(将自定义类分配给第一列):

    $('#example').DataTable( {
      columnDefs: [
        { targets: [ 0 ],
          className: "hide_column"
        }
      ]
    } );
    

    columns

    $('#example').DataTable( {
      "columns": [
        { className: "hide_column" },
        null,
        null,
        null,
        null
      ]
    } );
    

    代码 sn-ps 采取from here


    旧答案

    尝试添加

    "sClass": "hide_column"
    

    这应该使该列隐藏...

    【讨论】:

    • 这个答案是正确的,但重要的是要注意,除非将 hide_column 类添加到 CSS 中,否则它不起作用。作者将其放在“旧答案”部分底部的方式使其看起来似乎仍然不需要当前答案。
    • 对列使用 sClass 标签。它就像一个魅力。谢谢。
    • @Siddharth ,答案是什么?反正我只是换了大写的D
    • 嗨!我有一个关于这个的问题。我看到了这个,我也在我的数据表中使用了它,但我的问题是这个。我的 dataTables 中的每行都有两个复选框,一个用于状态,另一个用于 ID。我隐藏了 ID 列,这样它就不会显得凌乱。目的是我可以更新我的数据表中的数据。我将我的 dataTable 包装在 <form> 中,因此它可以传递到服务器端。现在发生的事情是当我隐藏并尝试更新让我们说第一页是 1-10 个数据。它更新并且没有错误。但是在更新第二页时,它不会读取隐藏列。它从服务器产生错误。 @丹尼尔
    • @ERROR401 我认为你最好用所有需要的代码打开一个新 Q(最小样本)
    【解决方案2】:

    以丹尼尔的回答为基础:

    css:

    th.hide_me, td.hide_me {display: none;}
    

    在数据表初始化中:

    "aoColumnDefs": [ { "sClass": "hide_me", "aTargets": [ 0 ] } ] // first column in visible columns array gets class "hide_me"
    

    记得将你的隐藏类也添加到你的单元格中:

    <thead>
        <th class="hide_me">First Column</th>
        <th>Second Column</th>
        <th>Third Column</th>
    </thead>
    

    如果您使用服务器端处理并希望从 ajax 源传入数据而不在数据表中可见,这也是一个有用的策略。您仍然可以在前端检索列的值,而无需显示它。有助于通过隐藏数据值等进行过滤。

    例子:

    // In datatables init file
    <script>
        var filteredValues = [];
        $('td.your_filtering_class').each(function(){
            var someVariable = $(this).find('.hide_me').html();
            filteredValues.push(someVariable);
        }
    </script>
    

    【讨论】:

      【解决方案3】:

      如果要隐藏多个列:

      $('#example').dataTable({
        "columnDefs": [{ 
          "targets": [0,1,3], //Comma separated values
          "visible": false,
          "searchable": false }
        ]
      });
      

      【讨论】:

      • 这是不正确的。他们明确指出他们不想使用 visible 属性。
      【解决方案4】:

      这是我对你的贡献。

      不确定代码是否正确,但可以正常工作。

      如果您像我一样拥有多个设置栏。

      $('#example').dataTable( {
        "columnDefs": [ {
              "targets"  : 'no-sort',
              "orderable": false,
              "order": [],
          }],
          "columnDefs": [ {
              "targets"  : 'hide_column',
              "orderable": false,
              "order": [],
              "visible": false
          }]
      } );
      

      【讨论】:

        【解决方案5】:

        你可以使用hide的方法。

        $(element).hide();
        

        要显示元素,使用方法show:

        $(element).show();
        

        要获取所需的列,可以使用 jquery 中的n-th child 选择器。

        【讨论】:

          猜你喜欢
          • 2017-09-15
          • 1970-01-01
          • 2011-09-16
          • 1970-01-01
          • 1970-01-01
          • 2017-12-14
          • 2012-08-31
          • 1970-01-01
          • 2013-10-24
          相关资源
          最近更新 更多