JQuery for Everyone: Total Calculated Columns
[code:js]
<script type="text/javascript" src="http://airbiz/_layouts/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
var colmns = new Array("Cr_x0020_Amount");
function addCommas(nStr)
{
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1))
{
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
/*array for groups based on cellIndex*/
function getArrayList(varIndex, groupName)
{
return $("#tbod"+groupName+"> tr").find(">td:eq(" + varIndex+ ")").get();
}
function getArrayForOutput(varIndex, groupName)
{
return $("#aggr"+groupName+"> tr:first> td:eq(" + varIndex + ")");
}
function CalcGroupPerColumn(groupName,varIndex,gn,n)
{
var x = 0;
var m = "";
var p1 = "";
var p2 = "";
if (groupName == '')
{
$("table.ms-listviewtable:first> tbody:eq(2)").attr("id","tbod");
}
var arrayList = getArrayList(varIndex,groupName);
$.each(arrayList, function(i,e)
{
x += Number($(e).text().replace(/\$|,|\)/g, "").replace(/\(/g,"-"));
if ($(e).text().indexOf("$") >= 0)
{
m = "$"
};
});
/*format for negative numbers*/
if (x < 0)
{
p1 = "(";
p2 = ")";
x = Math.abs(x);
}
var _t=$('#diidSort'+n).text();
var aggEl = getArrayForOutput(varIndex,groupName);
if (arrayList.length > 0)
{
aggEl
.css("text-align","right")
.html("<b>" + _t +" = "+p1+m+addCommas(x.toFixed(2))+p2+"</b>");
}
var countColumn = $("#aggr"+groupName+"> tr:first").find(".ms-vb").get();
$.each(countColumn,function(i,e)
{
/*$(e).text($(e).text().replace("Count =", gn + " : ") + " no(s)");*/
$(e).text("");
});
}
function getCellIndex(elId)
{
var myColumn = $(elId);
var myParent = myColumn.parents('th');
var result = myParent.attr("cellIndex");
return result;
}
/*sums money in specific list column*/
function CalcGroup(groupName,gn)
{
$.each(colmns, function(i, n){
var _CellIndex = getCellIndex('#diidSort' + n);
CalcGroupPerColumn(groupName,_CellIndex,gn,n);
});
}
/*BASE*/
$(function() {
/*alert('initialization');*/
var arrayGroup = $("[id*=titl]").get();
var arrayGroupName = $("[id*=titl]").get();
$.each(arrayGroup,function(i,e)
{
arrayGroup[i]=e.id.replace("titl","");
arrayGroupName[i]=$(e).find("a").eq(2).text();
CalcGroup(arrayGroup[i]+"_",arrayGroupName[i]);
});
$.each(colmns, function(i, n)
{
var xTotal = 0;
var m = "";
var _CellIndex = getCellIndex('#diidSort' + n);
var arrayIIGroup = $("[id*=aggr]").get();
var re = new RegExp("^aggr1-(\\d)__", "g");
var _t=$('#diidSort'+n).text();
$.each(arrayIIGroup,function(i,e)
{
if ($(e).attr("id").match(re))
{
var x = 0;
var p1 = "";
var p2 = "";
var arrayIGroup = $("[id*=" + $(e).attr("id").replace("__","") + "]").get();
$.each(arrayIGroup,function(i,ee)
{
if($(e).attr("id")!=$(ee).attr("id"))
{
var e = $("#" + $(ee).attr("id") + "> tr:first> td:eq(" + _CellIndex + ")");
var e_val = $(ee).text().substring($(ee).text().indexOf('=')+1);
x += Number(e_val.replace(/\$|,|\)/g, "").replace(/\(/g,"-"));
if (e_val.indexOf("$") >= 0)
{
m = "$"
};
}
});
xTotal+= x;
if (x < 0)
{
p1 = "(";
p2 = ")";
x = Math.abs(x);
}
/*x = p1+m+addCommas(x.toFixed(2))+p2;*/
var aggEl = $("#"+ $(e).attr("id") + "> tr:first> td:eq(" + _CellIndex + ")");
aggEl
.css("text-align","right")
.html("<b>" + _t +" = "+p1+m+addCommas(x.toFixed(2))+p2+"</b>");
}
});
if (xTotal < 0)
{
p1 = "(";
p2 = ")";
xTotal = Math.abs(xTotal);
}
else
{
p1 = "";
p2 = "";
}
var aggEl = $("#aggr> tr:first> td:eq(" + _CellIndex + ")");
aggEl
.css("text-align","right")
.html("<b>" + _t +" = "+p1+m+addCommas(xTotal.toFixed(2))+p2+"</b>");
});
});
</script>
[/code]
Updated : 3rd May 2009
[code:js]
<script type="text/javascript" src="http://airbiz/_layouts/jquery-1.3.2.min.js"></script>
<script type="text/javascript" lang="javascript">
var colmns = new Array("Net_x0020_Amount","Cr_x0020_Amount","Dr_x0020_Amount");
function addCommas(nStr)
{
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1))
{
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
/*array for groups based on cellIndex*/
function getArrayList(varIndex, groupName)
{
return $("#tbod"+groupName+"> tr").find(">td:eq(" + varIndex+ ")").get();
}
function getArrayForOutput(varIndex, groupName)
{
return $("#aggr"+groupName+"> tr:first> td:eq(" + varIndex + ")");
}
function CalcGroupPerColumn(groupName,varIndex,gn,n)
{
var x = 0;
var m = "";
var p1 = "";
var p2 = "";
if (groupName == '')
{
$("table.ms-listviewtable:first> tbody:eq(2)").attr("id","tbod");
}
var arrayList = getArrayList(varIndex,groupName);
$.each(arrayList, function(i,e)
{
x += Number($(e).text().replace(/\$|,|\)/g, "").replace(/\(/g,"-"));
if ($(e).text().indexOf("$") >= 0)
{
m = "$"
};
});
/*format for negative numbers*/
if (x < 0)
{
p1 = "(";
p2 = ")";
x = Math.abs(x);
}
var _t=$('#diidSort'+n).text().replace(" Amount","");
var aggEl = getArrayForOutput(varIndex,groupName);
if (arrayList.length > 0)
{
aggEl
.css("text-align","right")
.html("<b>" + _t +" = "+p1+m+addCommas(x.toFixed(2))+p2+"</b>");
}
var countColumn = $("#aggr"+groupName+"> tr:first").find(".ms-vb").get();
$.each(countColumn,function(i,e)
{
/*$(e).text($(e).text().replace("Count =", gn + " : ") + " no(s)");*/
$(e).text("");
});
/*renderHeader(varIndex,_t,xTotal,m);*/
}
function getCellIndex(elId)
{
var myColumn = $(elId);
var myParent = myColumn.parents('th');
var result = myParent.attr("cellIndex");
return result;
}
/*sums money in specific list column*/
function CalcGroup(groupName,gn)
{
$.each(colmns, function(i, n){
var _CellIndex = getCellIndex('#diidSort' + n);
CalcGroupPerColumn(groupName,_CellIndex,gn,n);
});
}
/*BASE*/
$(function() {
/*alert('initialization');*/
var arrayGroup = $("[id*=titl]").get();
var arrayGroupName = $("[id*=titl]").get();
$.each(arrayGroup,function(i,e)
{
arrayGroup[i]=e.id.replace("titl","");
arrayGroupName[i]=$(e).find("a").eq(2).text();
CalcGroup(arrayGroup[i]+"_",arrayGroupName[i]);
});
$.each(colmns, function(i, n)
{
var xTotal = 0;
var m = "";
var _CellIndex = getCellIndex('#diidSort' + n);
var _t=$('#diidSort'+n).text().replace(" Amount","");
$("[id]").filter(function(){return this.id.match(/aggr1-\d*\d__/);}).each(function(i,e)
{
var aggEl = $("#"+ $(e).attr("id") + "> tr:first> td:eq(" + _CellIndex + ")");
if(aggEl.html().length==0)
{
var x = 0;
var p1 = "";
var p2 = "";
$("[id]").filter(function(){return this.id.match(new RegExp("^" + $(e).attr("id").replace("__","_") + "\\d*\\d__", "g"));}).each(function(j,ee)
{
var ie = $("#" + $(ee).attr("id") + "> tr:first> td:eq(" + _CellIndex + ")");
var e_val = $(ie).text().substring($(ie).text().indexOf('=')+1);
x += Number(e_val.replace(/\$|,|\)/g, "").replace(/\(/g,"-"));
if (e_val.indexOf("$") >= 0)
{
m = "$"
}
});
xTotal+= x;
if (x < 0)
{
p1 = "(";
p2 = ")";
x = Math.abs(x);
}
/*x = p1+m+addCommas(x.toFixed(2))+p2;*/
aggEl
.css("text-align","right")
.html("<b>" + _t +" = "+p1+m+addCommas(x.toFixed(2))+p2+"</b>");
}
else
{
var e_val = aggEl.text().substring(aggEl.text().indexOf('=')+1);
xTotal+= Number(e_val.replace(/\$|,|\)/g, "").replace(/\(/g,"-"));
}
});
if (xTotal < 0)
{
p1 = "(";
p2 = ")";
xTotal = Math.abs(xTotal);
}
else
{
p1 = "";
p2 = "";
}
/*x = p1+m+addCommas(x.toFixed(2))+p2;*/
var aggEl = $("#aggr> tr:first> td:eq(" + _CellIndex + ")");
aggEl
.css("text-align","right")
.html("<b>" + _t +" = "+p1+m+addCommas(xTotal.toFixed(2))+p2+"</b>");
});
});
</script>
[/code]