如何根据数据项的属性对Datatables中的复杂列进行排序?

时间:2014-02-27 01:50:24

标签: javascript jquery datatables

我有这个数据表,列出了人。第一列包含一个人的3个属性:<td>[title] [lastName] [firstName]</td>

例如,如果数据是:

[
    {
        "firstName":"Foo",
        "lastName":"Bar",
        "title":"Z"
    },
    {
        "firstName":"John",
        "lastName":"Doe",
        "title":"A"
    }
];

然后按升序排序时,默认情况下会显示行:

A Doe John
Z Bar Foo

(“Z”之前的“A”)

但是,不是基于整个单元格内容的默认字符串排序,我希望它基于lastName。在这种情况下,我期望的升序排序是:

Z Bar Foo
A Doe John

(“Doe”之前的“Bar”)

我试着这样做:

var persons = [
    {
        "firstName":"Foo",
        "lastName":"Bar",
        "title":"Z"
    },
    {
        "firstName":"John",
        "lastName":"Doe",
        "title":"A"
    }
];

$.fn.dataTableExt.afnSortData["first-column"] = function (oSettings, iColumn) {
    return jQuery.map(oSettings.oApi._fnGetTrNodes(oSettings), function (tr, i) {
        return persons[i].lastName;
    });
};

$("table").dataTable({
    "aaData":persons,
    "aoColumns":[
        {
            "sTitle":"First column",
            "mData":function (source, type, val) {
                return source.title + " " + source.lastName + " " + source.firstName;
            },
            "sSortDataType":"first-column"
        }
    ]
});

对应的jsFiddle:http://jsfiddle.net/8Gsb3/1/

但是这种自定义排序不起作用 - 它仍然是单元格的第一个字母,即title

1 个答案:

答案 0 :(得分:-1)

只是查看你的代码,看来你正在使用数据表,为什么不使用datatable提供的排序功能。

$("table").dataTable({
  "aaData":persons,
  "aaSorting": [[1, 'desc']]
  ]
});

Datatable是基于0的,所以这会在为表的第二列加载时将表排序为默认的降序。

来源:http://datatables.net/release-datatables/examples/basic_init/table_sorting.html