Skip to content

Instantly share code, notes, and snippets.

@overset
Forked from nikolajbaer/gist:778800
Created January 14, 2011 00:01
Show Gist options
  • Save overset/778877 to your computer and use it in GitHub Desktop.
Save overset/778877 to your computer and use it in GitHub Desktop.
<html><head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
function tally (selector) {
$(selector).each(function () {
var total = 0, average = 0, symbol = '', sums = 0,
column = $(this).siblings(selector).andSelf().index(this),
sym = function (match) {
return (new Boolean((new RegExp('\\' + match).test(symbol))) == true) ? symbol : '';
};
$(this).parents().prevUntil(':has(' + selector + ')')
.find('td.sum:eq(' + column + ')', this).each(function () {
var content = $(this).html();
total += parseFloat(content.replace(/[^0-9\.]/g, '')) || 0;
symbol = (content.match(/%|\$/) || [])[0] || symbol;
sums++;
});
average = (total / sums).toFixed(2);
$(this).html(sym('$') + (selector.match(/average/) ? average : total ) + sym('%'));
});
}
tally('td.subtotal');
tally('td.total');
tally('td.average');
});
</script>
</head>
<body>
<table id="data">
<tr><th>Name</th><th>Age</th><th>Weight</th></tr>
<tr>
<td>Joe</td><td>30</td><td class="sum">175</td><td class="sum">%1</td><td class="sum">$1.000123</td></tr>
<tr><td>Jack</td><td>29</td><td class="sum">165</td><td class="sum">%1</td><td class="sum">$1.2</td></tr>
<tr><td>Jim</td><td>31</td><td class="sum">178</td><td class="sum">%1.2</td><td class="sum">$1.1</td></tr>
<tr><td>Jeff</td><td>28</td><td class="sum">173</td><td class="sum">%1.1213124432</td><td class="sum">$1</td></tr>
<tr><th colspan="2" align="right">Sum</th><td class="subtotal"></td><td class="subtotal"></td><td class="subtotal"></td></tr>
<tr><td>Jane</td><td>30</td><td class="sum">120</td><td class="sum">2%</td><td class="sum">$0.001</td></tr>
<tr><td>Jackie</td><td>30</td><td class="sum">112</td><td class="sum">2%</td><td class="sum">$0.004</td></tr>
<tr><th colspan="2" align="right">Sum</th><td class="subtotal"></td><td class="subtotal"></td><td class="subtotal"></td></tr>
<tr><th colspan="2" align="right">Total</th><td class="total"></td><td class="total"></td><td class="total"></td></tr>
<tr><th colspan="2" align="right">Average</th><td class="average"></td><td class="average"></td><td class="average"></td></tr>
</table>
</body>
</html>
@nikolajbaer
Copy link

bows deeply well done.. well done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment