Javascript 按数字而不是按字母顺序对表格排序
在w3上找到了这个简单的解决方案Javascript 按数字而不是按字母顺序对表格排序,javascript,Javascript,在w3上找到了这个简单的解决方案 它工作得很好,但是即使你在表中输入了数字,它也会按A到Z对表进行排序。所以如果你有像:1,2,3,11这样的值。。。它将对其进行排序1、11、2、3。我真的希望这是一个重复的问题,但我无法在这里找到答案。如何获得排序函数来对无数值进行排序。。。也许你也知道如何让它按日期排序 在您共享的示例中,我参与了asc或dsc比较的部分 如果查看示例的中的sortTable()函数,您将值作为字符串进行比较,因此数字的排序类似于-1、11、2、23、3 if (x
它工作得很好,但是即使你在表中输入了数字,它也会按A到Z对表进行排序。所以如果你有像:1,2,3,11这样的值。。。它将对其进行排序1、11、2、3。我真的希望这是一个重复的问题,但我无法在这里找到答案。如何获得排序函数来对无数值进行排序。。。也许你也知道如何让它按日期排序 在您共享的示例中,我参与了
asc
或dsc
比较的部分
如果查看示例的
中的sortTable()
函数,您将值作为字符串进行比较,因此数字的排序类似于-1、11、2、23、3
if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
//the x.innerHTML returns string
shouldSwitch= true;
break;
}
你必须这样做:
if (parseInt(x.innerHTML) > parseInt(y.innerHTML)) {
//if so, mark as a switch and break the loop:
shouldSwitch= true;
break;
}
现在您将比较数字,我建议为数字列创建一个单独的函数sortNumbers
,或者保留相同的函数sortTable(0,type)
->type
params可以接收文本或数字并进行相应排序
如果你需要更多的解释,请告诉我。
希望这能有所帮助。如果您坚持使用链接示例,请参阅本部分:
if (dir == "asc") {
if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
shouldSwitch= true;
break;
}
} else if (dir == "desc") {
if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
shouldSwitch= true;
break;
}
}
翻译为“如果比较的内容是数字,则比较它们的数值;如果其中一个不是,则将它们作为字符串进行比较”
比较日期的方法是相同的——首先将内容转换为日期对象(大致为
var xDate=new date(x.innerHTML);
,但并不详尽),然后比较日期对象;检查变量是否是有效的日期对象有点困难hough,检查一下左右的问题。您是想在客户端还是服务器上执行此操作?您的问题同时带有JS和PHP标记。@iainn您知道吗,您是对的。我很着急。。。是 啊我应该只是js
var xNumeric = parseFloat(x.innerHTML);
var yNumeric = parseFloat(y.innerHTML);
if (dir == "asc") {
if (!isNaN(xNumeric) && !isNaN(yNumeric) && xNumeric > yNumeric
|| (isNaN(xNumeric) || isNaN(yNumeric)) && x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
shouldSwitch= true;
break;
}
} else if (dir == "desc") {
if (!isNaN(xNumeric) && !isNaN(yNumeric) && xNumeric < yNumeric
|| (isNaN(xNumeric) || isNaN(yNumeric)) && x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
shouldSwitch= true;
break;
}
}