本文主要是介绍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
});
效果见图:
这篇关于EXT.js对中文字符串的排序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!