layui排序逻辑的一点修复

编写时间 2018-12-10 10:54:00

前天用Markdown写了份书单,但是发现没有排序功能,
以及UI有点死板(虽然比自己写的好看很多很多了

于是装上了layui的框架,把书单升级为layui的动态表格。
本来一切完美的,但是发现字数的排序是字典排序而不是数值排序。
查了一下,应该是因为咱书单的字数不是123或者123.456,而是123.45万
因为多了一个万,然后就判断不是数值了...

去掉"万"字也可以,但是太吃藕啦,于是定位到layui.js文件,修改下源码。
但是测试的时候又发现了,汉字排序有点奇怪,那就顺手改成汉字拼音排序吧。
使用param1.localeCompare(param2,"zh");排序
原代码是下面

clone.sort(function(o1, o2){
	var isNum = /^-?\d+$/
   ,v1 = o1[key]
   ,v2 = o2[key];
   if(isNum.test(v1)) v1 = parseFloat(v1);
   if(isNum.test(v2)) v2 = parseFloat(v2);

   if(v1 && !v2){
     return 1;
   } else if(!v1 && v2){
     return -1;
   }
   
   if(v1 > v2){
     return 1;
   } else if (v1 < v2) {
     return -1;
   } else {
     return 0;
   }
};

咱改成

clone.sort(function(o1, o2){
   var haveNum = /-?(\d+\.\d+)|(\d+)/
   ,v1 = o1[key]
   ,v2 = o2[key];
   
   //判断是否含有数字
   if(haveNum.test(v1) && haveNum.test(v2)){
      v1 = parseFloat(v1);
      v2 = parseFloat(v2);
      if(v1 > v2){
        return 1;
      } else if (v1 < v2) {
        return -1;
      } else {
        return 0;
      }
   }
   //否则返回拼音排序
   return v2.localeCompare(v1, "zh");
});
posted @ 2020-12-24 12:11  trty  阅读(202)  评论(0)    收藏  举报