嗨,
我正在使用数据表,并注意到在使用自定义排序功能时Chrome上的行为非常奇怪。
这是我的发现:
我做了一个小提琴,您可以在其中看到其行为。在您的内部,您会看到两个相同的表,只是它们的数据大小不同,第一个很小-不管是Chrome还是Firefox,一切正常。
第二个更大,Chrome无法对其进行排序。
小提琴: https://jsfiddle.net/ogoossens/d35cb4eh/3/
我的代码部分
自定义排序功能:
jQuery.fn.dataTableExt.oSort["customSort-desc"] = function (x, y) {
return formatPrice(x) < formatPrice(y);
};
jQuery.fn.dataTableExt.oSort["customSort-asc"] = function (x, y) {
return formatPrice(x) > formatPrice(y);
};
我如何清理数字格式
function formatPrice(unformattedPrice) {
// For debugging purposes
let returnValue = unformattedPrice;
// Here I check if there is "-" if so teh price shall be considered as 0
if (unformattedPrice == "-") {
returnValue = 0;
} else {
// If not lets get rid of EVERYTHING except the numbers
returnValue = returnValue.replace(" ","");
returnValue = returnValue.replace("$","");
}
// Lets make sure itll be considered float
returnValue = parseFloat(returnValue);
return returnValue;
}
我如何定义表格:
$('#example-ok').DataTable({
"paging": false,
"searching": false,
"info": false,
order: [],
"columns": [
{
"bSortable": true,
"sType": "customSort"
},
]
});
尝试在Firefox和Chrome中打开完整的小提琴,并告诉我第二张桌子在哪儿排序。
谢谢
答案 0 :(得分:2)
问题是要排序的数组具有相等的值,当具有相等的值时,应使用类似以下内容的方法:
az account show --query "{subscriptionId:id, tenantId:tenantId}"
此处的完整示例:https://jsfiddle.net/15qdx4g9/1/
使用jQuery.fn.dataTableExt.oSort["customSort-desc"] = function (x, y) {
if(formatPrice(x) == formatPrice(y)){
return 0;
}
if(formatPrice(x) < formatPrice(y)){
return 1
}
if(formatPrice(x) > formatPrice(y)){
return -1
}
};
时的行为相同。老实说,我不知道为什么Chrome和Firefox之间会有区别,我猜这是因为.sort()