EXT.js对中文字符串的排序

转自http://blog.163.com/guyywan_1314/blog/static/12885425020113274431890/

问题详述:我列表有一列name名称列  内容大概是  "桂花_S1"、"桂花_S2"、"桂花_S12"、"桂花_S3"、"桂花_S4"、"桂花_S5"、"桂花_S51"、"桂花_S6" 默认我们点列头的时候  肯定是  桂花_S1、桂花_S12、桂花_S2、桂花_S3.。。。。

但我要的效果是  桂花_S1、桂花_S2、桂花_S3、桂花_S4、桂花_S5、桂花_S6、桂花_S12、桂花_S51

我的思路的 重写ext本身的升降序方法:

Ext.data.Store.prototype.applySort = function() {
    if (this.sortInfo && !this.remoteSort) {
        var s = this.sortInfo, f = s.field;
        var st = this.fields.get(f).sortType;
        var fn = function(r1, r2) {         
            var v1 = st(r1.data[f]), v2 = st(r2.data[f]);           
            if (typeof(v1) == "string") {  
             var i1 = v1.indexOf("_S");
                var i2 = v2.indexOf("_S");
                if(i1 != -1 && i2 != -1){
                    i1 = parseInt(i1) +2;
                    i2 = parseInt(i2) +2;
                    var num1 =v1.substring(i1);
                    var num2 =v2.substring(i2);                   
                    num1 = parseInt(num1);
              num2 = parseInt(num2);
              return num1 > num2 ? 1 : (num1 < num2 ? -1 : 0);
                }
               return v1.localeCompare(v2);  
            }
            return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
        };      
        this.data.sort(s.direction, fn);
        if(this.snapshot && this.snapshot != this.data) {
            this.snapshot.sort(s.direction, fn);
        }
    }
};

将上面代码粘贴到 ext-all.js  或者html页面顶部。 保证页面打开加载到就行。

主要代码在if (typeof(v1) == "string")这个{}里面。注意的是肯定是有规律的。比如这个是比较_S后台的数字。

当然,如果刚grid数据加载的时候 就要排该列,这样写:

var gridStore = new Ext.data.JsonStore({
   url : 'test.jsp', 
   root : 'items',
   fields : ['id', 'name', 'name2', 'name3', 'addTime'],
   autoLoad : true,
   sortInfo: {field: 'name', direction: 'ASC'}  //关键代码  默认排序项name
  }); 

效果见图:

Extjs gridPanel分页自定义排序方式、 重写升序降序方法、grid字符串列按数字排序 - 雨缘 - 媛媛的博客

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值