Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按数字而不是按字母顺序对表格排序_Javascript - Fatal编程技术网

Javascript 按数字而不是按字母顺序对表格排序

Javascript 按数字而不是按字母顺序对表格排序,javascript,Javascript,在w3上找到了这个简单的解决方案 它工作得很好,但是即使你在表中输入了数字,它也会按A到Z对表进行排序。所以如果你有像:1,2,3,11这样的值。。。它将对其进行排序1、11、2、3。我真的希望这是一个重复的问题,但我无法在这里找到答案。如何获得排序函数来对无数值进行排序。。。也许你也知道如何让它按日期排序 在您共享的示例中,我参与了asc或dsc比较的部分 如果查看示例的中的sortTable()函数,您将值作为字符串进行比较,因此数字的排序类似于-1、11、2、23、3 if (x

在w3上找到了这个简单的解决方案


它工作得很好,但是即使你在表中输入了数字,它也会按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;
    }
  }