有一个需求,需要jqgrid中所有的数字用千分位显示
千分位替换的代码到是简单
var num = 234223423432;
var reg=/\d{1,3}(?=(\d{3})+$)/g;
num = (num + '').replace(reg, '$&,');
问题是如何识别数字
之前改过源码,解决了空格的问题https://blog.csdn.net/qq_36804701/article/details/90710224
在这个基础上继续修改
G = function (a, b, c, d, e, f) {
//TODO cellvalue转化
b = x(a, b, c, e, "add");
if(typeof b == "string"){
var reg = /<[^>]+>/g;
if(!reg.test(b)){
b = b.replace(/\s/g," ");
}
}
if(!isNaN(b)){
var reg=/\d{1,3}(?=(\d{3})+$)/g;
b = (b + '').replace(reg, '$&,');
}
return '<td role="gridcell" ' + p(c, d, b, e, a, f) + ">" + b + "</td>"
},
但是这个时候又出现了一个问题,那就是有的单元格虽然是字符串类型但是会取数字的名字,比如产品编号很可能就是一串数字,而b则一定是string类型,用typeof不能识别。
我仔细观察后发现传进来的其实是数字类型,但是jqgrid给转化成字符串了。继续debug
G方法是在这里调用的,g是ajax请求过来的原生数据,y[p]是这个单元格的列名,于是我把y[p]传进了G方法
G = function (a, b, c, d, e, f,key) {
//TODO cellvalue转化
b = x(a, b, c, e, "add");
if(typeof b == "string"){
var reg = /<[^>]+>/g;
if(!reg.test(b)){
b = b.replace(/\s/g," ");
}
}
if(typeof e[key] == "number"){
var reg=/\d{1,3}(?=(\d{3})+$)/g;
b = (b + '').replace(reg, '$&,');
}
return '<td role="gridcell" ' + p(c, d, b, e, a, f) + ">" + b + "</td>"
},
然后用e[key]就能拿到原生数据,从而判断类型,这样就可以了。
但是要注意,你在后台传数字就不能用字符串而必须用数字类型