我有这个数据表,列出了人员。第一列包含一个人的 3 个属性:<td>[title] [lastName] [firstName]</td>
.
例如,如果数据是:
[
{
"firstName":"Foo",
"lastName":"Bar",
"title":"Z"
},
{
"firstName":"John",
"lastName":"Doe",
"title":"A"
}
];
然后,当升序排序时,行将默认为:
A Doe John
Z Bar Foo
(“A”在“Z”之前)
但是我希望它基于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
最佳答案
看你的代码,好像你使用的是datatable,为什么不使用datatable提供的排序功能。
$("table").dataTable({
"aaData":persons,
"aaSorting": [[1, 'desc']]
]
});
Datatable 是从 0 开始的,因此这会在加载时对表进行排序,以使表的第二列默认为降序。
来源:http://datatables.net/release-datatables/examples/basic_init/table_sorting.html
关于javascript - 如何根据数据项的属性对数据表中的复杂列进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22057478/