【发布时间】:2018-12-10 23:47:40
【问题描述】:
我正在尝试对名为“优先级”的列进行排序。此列有 5 个可能的值:高、中、低、无优先级和 N/A。我希望能够按该顺序(升序)或反向(降序)对它们进行排序。我的方法是根据我发现的here 创建一个自定义排序函数。这就是我所做的:
option["columnDefs"] = [
{
"render":function(data,type,row) {
var $select;
switch(data) {
case: "High":
$select = $('<div class="my-class-high" priority="high">High</div');
break;
case: "Medium":
$select = $('<div class="my-class-medium" priority="medium">Medium</div');
break;
// etc. for other values.
}
return $select.prop("outerHTML");
},
"targets" : 7,
"sType" : "priority"
}
];
function getRank(cellHtml) {
switch ($(cellHtml).attr("priority")) {
case "high":
return 0;
case "medium":
return 1;
case "low":
return 2;
case "unprioritized":
return 3;
case "notapplicable":
return 4;
default:
throw "Unrecognized priority.";
}
}
jQuery.fn.dataTableExt.oSort["priority-desc"] = function (x, y) {
return getRank(x) < getRank(y);
};
jQuery.fn.dataTableExt.oSort["priority-asc"] = function (x, y) {
return getRank(x) > getRank(y);
};
//further down...
$(#mytable).DataTable(option);
所有代码,包括排序函数,都按预期命中。当我单击优先级列时,字形会翻转。我的问题是显示的排序顺序永远不会改变:它保持升序,正确显示在表格顶部的高优先级。
我创建了一个临时事件处理函数来检查事情:
$(tableLookup).on('order.dt',function() {
var order = table.order();
});
有了这个,我可以进一步验证每次单击列标题时排序顺序是否在变化(至少在内部),即使显示的顺序没有更新。
我正在运行 jquery.dataTables.js 版本 1.10.4。
我也尝试过使用数据排序属性,正如 Anjani 的回答 here 中所建议的那样。这对排序顺序没有任何影响——表格仍然使用显示的文本按字母顺序对列进行排序。
任何想法可能导致我看到的这些问题以及如何让排序工作?
【问题讨论】:
标签: jquery sorting datatables