【问题标题】:Dynamic column in jQuery DataTablesjQuery DataTables 中的动态列
【发布时间】:2015-10-16 00:04:22
【问题描述】:

在我的应用程序中,有一些列被赋予了特权。 如果该列没有被授予访问该特定列的权限,则不会显示。

我的代码是这样的:http://jsfiddle.net/oscar11/5jccbzdy/11/

// DataTable
    var table = $('#example').DataTable({
        "order": [[0, 'asc']],
        "drawCallback": function (settings){
            var api = this.api();

            // Zero-based index of the column containing names
            var col_name = 0;

            // If ordered by column containing names
            if (api.order()[0][0] === col_name) {
                var rows = api.rows({ page: 'current' }).nodes();
                var group_last = null;

                api.column(col_name, { page: 'current' }).data().each(function (name, index){
                    var group = name;
                    var data = api.row(rows[index]).data();

                    if (group_last !== group) {
                        $(rows[index]).before(
                            '<tr class="group" style="background-color:' + data[4] + '"><td colspan="5">' + group + '</td></tr>'
                        );

                        group_last = group;
                    }
                });
            }
        }
    });

如何让上面的代码变得更加动态并调整被赋予权限的列数?

如果被赋予权限的列数:5,那么:

'<tr class="group" style="background-color:' + data[4] + '"><td colspan="5">' + group + '</td></tr>'

如果被授予权限的列数:3,那么:

  '<tr class="group" style="background-color:' + data[2] + '"><td colspan="3">' + group + '</td></tr>'

谢谢

【问题讨论】:

    标签: jquery datatables


    【解决方案1】:

    解决方案

    您可以使用columns.name 选项为包含颜色的数据列定义名称。

    然后在行分组代码中,您可以在api.column("color:name").index() 中使用column-selector color:name 来获取该列的索引。

    使用下面的代码:

    // DataTable
    var table = $('#example').DataTable({
        "order": [[3, 'asc']],
        "columnDefs": [
            { targets: 3, name: "group" },
            { targets: -1, name: "color" }
         ],
        "drawCallback": function (settings){
            var api = this.api();
    
            // Zero-based index of the column containing group names
            var col_name = api.column("group:name").index();
            var col_color = api.column("color:name").index();
    
            // If ordered by column containing names
            if (api.order()[0][0] === col_name) {
                var rows = api.rows({ page: 'current' }).nodes();
                var group_last = null;
    
                api.column(col_name, { page: 'current' }).data().each(function (group, index){
                    if (group_last !== group){                        
                        var color = api.cell({
                            row: api.row(rows[index]).index(),
                            column: col_color 
                        }).data();
    
                        $(rows[index]).before(
                            '<tr class="group" style="background-color:' + color + '"><td colspan="5">' + group + '</td></tr>'
                        );
    
                        group_last = group;
                    }
                });
            }
        }
    });
    

    演示

    有关代码和演示,请参阅this jsFiddle

    【讨论】:

    • 感谢您回答我的问题。我仍然很困惑。我试过上面的代码。我将“渲染引擎”列更改为第三列。例如,未授予“引擎”列访问权限(如果未授予访问该列的权限,则该列将丢失)。我试过这样的代码:link。我怎样才能使分组列固定列“渲染引擎”,尽管其他列(列“引擎”)没有被授予访问权(被淘汰)?
    • @mosestoh,添加了更多详细信息并更新了示例。您可以在columnDefs 部分中指定包含组和颜色的列的索引。然后drawCalback 中的代码将使用名称groupcolor 来检索这些索引,而不是对它们进行硬编码。
    • 谢谢 Gyrocode.com。但是我仍然很难实现我的问题。你试试看这里:link。我怎样才能使分组列固定列“渲染引擎”,尽管其他列(列“引擎”)没有被授予访问权(被淘汰)?我的意思是喜欢它。
    • @mosestoh,请参阅我关于为列分配名称的更新答案,另请参阅jsfiddle.net/5qtoyunq/3
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多