javascript高级的文件目录排序代码

 更新时间:2010年08月30日 09:59:04   作者:  
这几天在做一个文件管理的模块,里面有排序的功能,产品经理看了说希望能做出更加智能的文件排序功能,就像是win7的名称排序一样,主要就是文件名中的数字会按大小排序,而不是直接按ascii码 ,这两天晚上没事,就先写了这个排序方法,下个版本中就可以用上了
刚写完,欢迎大家帮忙测试
完整的测试代码:

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]

主要的排序功能源码如下(v1):
复制代码 代码如下:

var fileSort=function(arr){
arr.sort();
var res=[],temp=[],i=0,j=0,k,reg,sc=true,cur=arr[0];
while(cur.charCodeAt(0)<48){//数字之前的标点等开头的
res[i]=cur;
if(i===arr.length-1)return res;
cur=arr[++i];
}
while(cur.charCodeAt(0)<58){//以数字开头的
temp[j++]=cur;
if(i===arr.length-1)break;
cur=arr[++i];
}
temp.sort(function(a,b){//排序以数字开头的
return parseInt(a,10)-parseInt(b,10);
});
res=res.concat(temp);
temp=[];j=0;
for(;i<arr.length;i++){
cur=arr[i];
if((k=cur.search(/\d+/))===-1 || i===arr.length-1){//最后一个文件时直接添加
res[i]=cur;
}else {
reg=new RegExp("^"+cur.substr(0,k)+"\\d+");
while(cur.search(reg)!==-1){
temp[j++]=cur;
if(i===arr.length-1)break;
cur=arr[++i];
}
if(temp.length>0){
temp.sort(function(a,b){
return parseInt(a.substr(k),10)-parseInt(b.substr(k),10);
});
res=res.concat(temp);
temp=[];j=0;
i-=1;//减1,再执行查找使while结束的str
}
}
}
return res;
}

后来想想,上面的版本中,前面 两个while完全是多余 的,而且去掉之后 ,直接就支持了特殊字符后面中包含数字的排序
v2(注意RegExp尚未escape):
复制代码 代码如下:

var fileSort=function(arr){
arr.sort();
var res=[],temp=[],i=0,j=0,k,reg,cur;
for(;i<arr.length;i++){
cur=arr[i];
if((k=cur.search(/\d+/))===-1 || i===arr.length-1){//最后一个文件时直接添加
res[i]=cur;
}else {
reg=new RegExp("^"+cur.substr(0,k)+"\\d+");
while(cur.search(reg)!==-1){
temp[j++]=cur;
if(i===arr.length-1)break;
cur=arr[++i];
}
if(temp.length>0){
temp.sort(function(a,b){
return parseInt(a.substr(k),10)-parseInt(b.substr(k),10);
});
res=res.concat(temp);
temp=[];j=0;
i-=1;//减1,再执行查找使while结束的str
}
}
}
return res;
}

另外,最近用jq的发现:
1 :hidden 这个选择会选择所有不可见元素,如果是clone()的元素,还没添加到dom时,都是属于不可见
2 .serialize() 使用这个方法时,需要为form内的表单元素指定name,否则这个方法返回空字符串
3 jstree插件不能与早版本的validate插件同时使用,因为早版本的validate重新了jq的delegate方法,更新版本就好了
4 ui中DatePicker插件不能与有.hasDatepicker的文本框绑定 ,需要先去掉此类名,才行
5 closest,live(delegate)真是好用的方法

相关文章

  • JS实现商品橱窗特效

    JS实现商品橱窗特效

    这篇文章主要为大家详细介绍了JS实现商品橱窗特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • BootStrap3使用错误记录及解决办法

    BootStrap3使用错误记录及解决办法

    这篇文章主要介绍了BootStrap3使用错误记录及解决办法,需要的朋友可以参考下
    2016-12-12
  • JavaScript实现网页tab栏效果制作

    JavaScript实现网页tab栏效果制作

    这篇文章主要为大家详细介绍了JavaScript实现网页tab栏效果制作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • JavaScript 使用Ckeditor+Ckfinder文件上传案例详解

    JavaScript 使用Ckeditor+Ckfinder文件上传案例详解

    这篇文章主要介绍了JavaScript 使用Ckeditor+Ckfinder文件上传案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • javascript实现漂亮的拖动层,窗口拖拽特效

    javascript实现漂亮的拖动层,窗口拖拽特效

    一个可关闭、可随意拖动位置的网页弹出层代码,美化的相当漂亮,简洁实用,还可拖动改变大小,通过八个方向改变大小,学习这类特效编写的网页设计者可参阅一下
    2015-04-04
  • 基于js中this和event 的区别(详解)

    基于js中this和event 的区别(详解)

    下面小编就为大家带来一篇基于js中this和event 的区别(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • JS实现元素上下左右移动效果

    JS实现元素上下左右移动效果

    这篇文章主要为大家详细介绍了JS实现元素上下左右移动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 微信小程序登录时如何获取input框中的内容

    微信小程序登录时如何获取input框中的内容

    这篇文章主要介绍了微信小程序登录时如何获取input框中的内容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 浅析使用BootStrap TreeView插件实现灵活配置快递模板

    浅析使用BootStrap TreeView插件实现灵活配置快递模板

    这篇文章主要介绍了使用bootstrap-treeview插件实现灵活配置快递模板的相关资料,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • 在JavaScript中终止forEach循环的三种方式

    在JavaScript中终止forEach循环的三种方式

    如何终止forEach循环这个问题估计会难倒一部分同学,甚至会有人反问,forEach循环在JavaScript中能终止吗?本文小编给大家介绍了三种方式可以终止forEach循环,需要的朋友可以参考下
    2023-11-11

最新评论