Skip to content

Instantly share code, notes, and snippets.

@stijnsanders
Created July 19, 2013 15:30
Show Gist options
  • Save stijnsanders/6040035 to your computer and use it in GitHub Desktop.
Save stijnsanders/6040035 to your computer and use it in GitHub Desktop.
A simple straightforward sortable table in JavaScript
<style><!--
TABLE,P {padding:0.2em;}
TH {padding: 0.2em;border:1px solid green;}
TH.sorted_up {background-color:#CFC;}
TH.sorted_down {background-color:#FCC;}
TD {padding: 0.2em;border:1px solid blue;}
TD.n {text-align:right;}
//--></style>
<table id="sortable" cellspacing="0" cellpadding="2">
<tr><th>A</th><th>B</th><th>C</th></tr>
<tr><td>test</td><td class="n">1</td><td sortby="0">zero</td></tr>
<tr><td>a</td><td class="n">5</td><td sortby="10">ten</td></tr>
<tr><td>aaa</td><td class="n">3</td><td sortby="180">one hundred and eighty</td></tr>
<tr><td>x</td><td class="n">4</td><td sortby="400">four hundred</td></tr>
<tr><td>y</td><td class="n">5</td><td sortby="1">one</td></tr>
<tr><td>z</td><td class="n">2</td><td sortby="300">three hundred</td></tr>
<tr><td>test</td><td class="n">10</td><td sortby="20">twenty</td></tr>
</table>
<script><!--
function cellSortValue(x)
{
var a=x.sortby_renderedvalue;
if(!a)
{
a=x.getAttribute("sortby");
a=new Number(a).valueOf()||a;
if(!a&&x.className=="n")a=new Number(x.textContent||x.innerText).valueOf();
if(!a)a=x.textContent||x.innerText;
x.sortby_renderedvalue=a;
}
return a;
}
function initSortTable(tableX)
{
tableX.sortSequence=[];
tableX.rows[0].onclick=function(event)
{
var th=event.target||event.srcElement;
var x;
var y;
var d;
for(y=0;y<this.cells.length;y++)
if(this.cells[y]==th)
x=y;
else
this.cells[y].className="";
if(th.className=="sorted_up")
{
th.className="sorted_down";
d=-1;
}
else
{
th.className="sorted_up";
d=1;
}
var t=this.parentElement.rows;
var z=[];
for(y=1;y<t.length;y++)z[z.length]=t[y];
z.sort(
function(a,b)
{
var i=0;
var aa=cellSortValue(a.cells[x]);
var bb=cellSortValue(b.cells[x]);
var dd=d;
while(aa==bb&&i<tableX.sortSequence.length)
{
aa=cellSortValue(a.cells[tableX.sortSequence[i].i]);
bb=cellSortValue(b.cells[tableX.sortSequence[i].i]);
dd=tableX.sortSequence[i].d;
i++;
}
return ((aa==bb)?0:((aa<bb)?-dd:dd));
});
for(y=0;y<z.length;y++) this.parentElement.appendChild(z[y]);
delete z;
tableX.sortSequence.unshift({i:x,d:d});//TODO: nix duplicates
};
}
initSortTable(document.getElementById("sortable"));
//--></script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment