首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据表1.10 - HTML5“数据顺序”攻击在TD中没有影响

数据表1.10 - HTML5“数据顺序”攻击在TD中没有影响
EN

Stack Overflow用户
提问于 2014-07-04 07:40:14
回答 1查看 11.4K关注 0票数 8

我在订购包含HTML的列时遇到了困难。在1.10的文档中指出,在默认情况下应该解决这个问题,但实际上并非如此。然后,我研究了1.10的新特性,发现如果同一列中的每个TD元素都有一个“数据顺序”属性,则可以通过所述属性进行排序。太棒了!问题是,我不能让它起作用。

奇怪的是,当页面是静态的时候,它们的示例是按预期工作,而不是在动态加载数据和表时。

我将使用以下选项和修改来启动表,以添加属性。无效操作是为了告诉Datatable它需要重新绘制它(我看到在某个地方需要它):

代码语言:javascript
复制
"createdRow": function ( row, data, index ) {
                if ( data[6] ) {
                    cell = $('td', row).eq(6);
                    value = cell.text();
                    if(value == "Ej fakturerad") {
                        cell.attr('data-order', 1);
                    }
                    else if(value == "Nej") {
                        cell.attr('data-order', 2);
                    }
                    else if(value == "Kredit") {
                        cell.attr('data-order', 3);
                    }
                    else if(value == "Ja") {
                        cell.attr('data-order', 4);
                    }
                }
                oTable
                    .row( index )
                    .invalidate()
                    .draw();
            },

我使用一个来自Laravel项目中的Chumper/ DataTable的composer包来实现这个DataTable,这意味着数据源是Ajax,并且使用服务器端处理。

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2015-05-06 17:59:33

通过查看DataTables源代码,HTML5 data-属性似乎只在表初始化期间读取,并且只用于静态数据。

溶液

解决方案#1

对于服务器端处理,您可以查看发送一个值以进行排序,以及一个仅针对特定单元格在单元格中显示的值。有关详细信息,请参阅正交数据示例

基本上,对于结构如下的行数据:

代码语言:javascript
复制
{
    "name": "Tiger Nixon",
    "position": "System Architect",
    "salary": "$3,120",
    "start_date": {
        "display": "Mon 25th Apr 11",
        "timestamp": "1303682400"
    },
    "office": "Edinburgh",
    "extn": "5421"
}

DataTables初始化代码应该是:

代码语言:javascript
复制
$(document).ready(function() {
    $('#example').dataTable( {
        ajax: "data/orthogonal.txt",
        columns: [
            { data: "name" },
            { data: "position" },
            { data: "office" },
            { data: "extn" },
            { data: {
                _:    "start_date.display",
                sort: "start_date.timestamp"
            } },
            { data: "salary" }
        ]
    } );
} );

在本例中,start_data.display将显示在表中,但start_data.timestamp将用于排序。

解决方案#2

或者,您可以使用columns.render属性定义一个函数来确定要动态排序的值,例如:

代码语言:javascript
复制
$('#example').dataTable({
    "columnDefs": [{
        "targets": 6,
        "data": "field_name",
        "render": function (data, type, full, meta) {
            if(type === 'sort'){
               if(data === "Ej fakturerad") {
                   data = 1;
               } else if(data === "Nej") {
                   data = 2;
               } else if(data === "Kredit") {
                   data = 3;
               } else if(data === "Ja") {
                   data = 4;
               }
            }

            return data;
        }
    }]
});
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24569073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档