JqGrid合并单元格的效率问题解决

JqGrid合并单元格的效率问题解决

大部分的代码方式
function MergerRowspan(gridName, CellName) {
//得到显示到界面的id集合
var mya = $("#" + gridName + “”).getDataIDs();
//当前显示多少条
var length = mya.length;
var rowSpanTaxCount = 1;
for (var i = 0; i < length;i++) {
//从上到下获取一条信息
var before = $("#" + gridName + “”).jqGrid(‘getRowData’, mya[i]);
//定义合并行数
rowSpanTaxCount = 1;
for (j = i + 1; j <= length; j++) {
//和上边的信息对比 如果值一样就合并行数+1 然后设置rowspan 让当前单元格隐藏
var end = $("#" + gridName + “”).jqGrid(‘getRowData’, mya[j]);
if (before[CellName] == end[CellName]) {
rowSpanTaxCount++;
KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 3: ("#̲" + gridName + …("#" + CellName + “” + mya[i] + “”).attr(“rowspan”, rowSpanTaxCount);//效率低
}
//修改为这种方式
$("#" + gridName + “”).setCell(mya[i], CellName, ‘’, ‘’, { rowspan: rowSpanTaxCount });
}
}

tips:有两种
1.内层循环写:
$("#" + CellName + “” + mya[i] + “”).attr(“rowspan”, rowSpanTaxCount)
2.外层循环写:
$("#" + gridName + “”).setCell(mya[i], CellName, ‘’, ‘’, { rowspan: rowSpanTaxCount });
第二种方式稍微比第一种要好一些毕竟不用每次循环都合并一次

但是当我们遇到前台grid数据很多很多时,你会发现合并单元格变的很卡
改进后的代码
function MergerRowspan(gridName, CellName) {
//得到显示到界面的id集合
var mya = $("#" + gridName + “”).getDataIDs();
//当前显示多少条
var length = mya.length;
var rowSpanTaxCount = 1;
for (var i = 0; i < length;) {
//从上到下获取一条信息
var before = $("#" + gridName + “”).jqGrid(‘getRowData’, mya[i]);
//定义合并行数
rowSpanTaxCount = 1;
for (j = i + 1; j <= length; j++) {
//和上边的信息对比 如果值一样就合并行数+1 然后设置rowspan 让当前单元格隐藏
var end = $("#" + gridName + “”).jqGrid(‘getRowData’, mya[j]);
if (before[CellName] == end[CellName]) {
rowSpanTaxCount++;
KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 3: ("#̲" + gridName + …("#" + CellName + “” + mya[i] + “”).attr(“rowspan”, rowSpanTaxCount);//效率低
}
//修改为这种方式
$("#" + gridName + “”).setCell(mya[i], CellName, ‘’, ‘’, { rowspan: rowSpanTaxCount });
i=j;//不能是i++的方式,因为i++会造成没有必要的循环,合并前后before的值是完全一样的,因此i++还会从原始数据的+1开始循环并非合并后的第二行
}
}

tips:
1.Jqgrid的rowSpan和hide【即合并操作】并未改变
$("#" + gridName + “”).jqGrid(‘getRowData’, mya[i])
的值,也就是说原来的第N行内容还是第N行内容,并没有改变,只是说展示的样式变了
2.基于1的理论,那么我们的i也就是第一层循环,应该从合并的下一行开始即j而不是依次机械式的循环i。不断的i++循环就会造成不必要的循环和合并,造成资源浪费。比如某列的所有行内容恰好都一样,就会多循环(n-2)(n-1)/2次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值