Javascript Jquery排序表td未正确排序货币

Javascript Jquery排序表td未正确排序货币,javascript,jquery,html,Javascript,Jquery,Html,您好,我是jquery和HTML新手,我正在尝试按货币对我的表进行排序,但如果它是货币,则排序不正确,但如果它是按字母顺序排序的,则可以工作,任何人都可以帮助我或指导我,我将非常感谢您。我的货币格式有千位分隔符和十进制。每当单击th时,该行将被排序 函数可排序(f,n){ var rows=$('#mytable tbody tr').get(); 行排序(函数(a,b){ var A=getVal(A); var B=getVal(B); if(AB){ 返回1*f; } 返回0; });

您好,我是jquery和HTML新手,我正在尝试按货币对我的表进行排序,但如果它是货币,则排序不正确,但如果它是按字母顺序排序的,则可以工作,任何人都可以帮助我或指导我,我将非常感谢您。我的货币格式有千位分隔符和十进制。每当单击th时,该行将被排序

函数可排序(f,n){
var rows=$('#mytable tbody tr').get();
行排序(函数(a,b){
var A=getVal(A);
var B=getVal(B);
if(AB){
返回1*f;
}
返回0;
});
函数getVal(elm){
var v=$(elm).children('td').eq(n).text().toUpperCase();
如果($.isNumeric(v)){
v=parseInt(v,10);
}
返回v;
}
$.each(行,函数(索引,行){
$(“#mytable”).children('tbody').append(行);
});
}
var f_sl=1;
var f_nm=1;
$(“#sl”)。单击(函数(){
f_sl*=-1;
var n=$(this.prevAll().length;
可排序(f_sl,n);
});
$(“#nm”)。单击(函数(){
f_nm*=-1;
var n=$(this.prevAll().length;
可排序(f_nm,n);
});

瓦尔
名称
1000.00马来西亚令吉
艾纳(西)
20000.00马来西亚令吉
海扎
5000.15马来西亚令吉
安娜
5000.16马来西亚令吉
泽德
您可以使用它的
数值
选项

而不是:

if(AB){
返回1*f;
}
返回0;
您可以使用:

if(f==1){
返回A.localeCompare(B,'en',{numeric:true});
}否则{
返回B.localeCompare(A,'en',{numeric:true});
}

另外,
localeCompare
可以将数值作为字符串处理,因此您不需要在
getVal
函数中使用
parseInt()
——处理数字的唯一附加更改是在排序时使用正则表达式从数字中删除所有的
分隔符;排序后,它不会对单词产生任何影响

函数可排序(f,n){
var rows=$('#mytable tbody tr').get();
行排序(函数(a,b){
变量A=getVal(A)。替换(/(\d),(?=\d)/g,“$1”);
变量B=getVal(B)。替换(/(\d),(?=\d)/g,“$1”);
如果(f==1){
返回A.localeCompare(B,'en-UK'{
数字:真
});
}否则{
返回B.localeCompare(A,‘英国’{
数字:真
});
}
});
函数getVal(elm){
返回$(elm).children('td').eq(n).text().toUpperCase();
}
$.each(行,函数(索引,行){
$(“#mytable”).children('tbody').append(行);
});
}
var f_sl=1;
var f_nm=1;
$(“#sl”)。单击(函数(){
f_sl*=-1;
var n=$(this.prevAll().length;
可排序(f_sl,n);
});
$(“#nm”)。单击(函数(){
f_nm*=-1;
var n=$(this.prevAll().length;
可排序(f_nm,n);
});

瓦尔
名称
6533.00马来西亚令吉
艾纳(西)
20.00马来西亚令吉
海扎
1174.00 RM
安娜
50.16令吉
泽德

您应该调试javascript以查看发生了什么我看你的代码是对的;如果您按货币排序,您会得到一个类似(1,20,5,5)的订单,而当您使用[RM 1000.00,RM 20000.00,RM 5000.15,RM 5000.16]进行排序时,它应该是(1,5,5,20)错误的排序。非常感谢您的帮助,我尝试过,但当值更改VALnameRM 6533.00AINA(W)时排序不正确20.00室Heyzarm 1174.00室50室。16ZED@Aika我已经用新数据更新了我的答案——这是语言环境比较如何处理十进制分隔符的问题(或者更多,它没有)。修复方法是在排序时从数字字符串中删除