-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHTMLSortTable.js
More file actions
79 lines (79 loc) · 3.34 KB
/
HTMLSortTable.js
File metadata and controls
79 lines (79 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
var TableIDvalue="table";
var TableLastSortedColumn=-1;
function SortTable() {
var sortColumn=parseInt(arguments[0]);
var type=arguments.length>1?arguments[1]:'T';
var dateformat=arguments.length>2?arguments[2]:'';
var TableIDvalue=arguments.length>3?arguments[3]:'table';
var table=document.getElementById(TableIDvalue);
var tbody=table.getElementsByTagName("tbody")[0];
var rows=tbody.getElementsByTagName("tr");
var arrayOfRows=new Array();
type=type.toUpperCase(); dateformat=dateformat.toLowerCase();
for (var i=0, len=rows.length; i<len; i++) {
arrayOfRows[i]=new Object;
arrayOfRows[i].oldIndex=i;
var celltext=rows[i].getElementsByTagName("td")[sortColumn].innerHTML.replace(/<[^>]*>/g,"");
if(type=='D') {
arrayOfRows[i].value=GetDateSortingKey(dateformat,celltext);
} else {
var re=type=="N"?/[^\.\-\+\d]/g:/[^a-zA-Z0-9]/g;
arrayOfRows[i].value=celltext.replace(re,"").slice(0,25).toLowerCase();
}
} if (sortColumn==TableLastSortedColumn) { arrayOfRows.reverse();
} else { TableLastSortedColumn=sortColumn;
switch(type) {
case "N":arrayOfRows.sort(CompareRowOfNumbers);break;
case "D":arrayOfRows.sort(CompareRowOfNumbers);break;
default:arrayOfRows.sort(CompareRowOfText);
}
} var newTableBody=document.createElement("tbody");
for (var i=0, len=arrayOfRows.length; i<len; i++) {
newTableBody.appendChild(rows[arrayOfRows[i].oldIndex].cloneNode(true));
} table.replaceChild(newTableBody,tbody);
}
function CompareRowOfText(a,b) {
var aval=a.value,bval=b.value;
return(aval==bval?0:(aval>bval?1:-1));
}
function CompareRowOfNumbers(a,b) {
var aval=/\d/.test(a.value)?parseFloat(a.value):0;
var bval=/\d/.test(b.value)?parseFloat(b.value):0;
return(aval==bval?0:(aval>bval?1:-1));
}
function GetDateSortingKey(format,text) {
if (format.length<1) { return ""; }
format=format.toLowerCase(),text=text.toLowerCase();
text=text.replace(/^[^a-z0-9]*/,"");
text=text.replace(/[^a-z0-9]*$/,"");
if (text.length<1) { return ""; }
text=text.replace(/[^a-z0-9]+/g,",");
var date=text.split(",");
if (date.length<3) { return ""; }
var d=0,m=0,y=0; for (var i=0; i<3; i++) {
var ts=format.substr(i,1);
if (ts=="d") { d=date[i];
} else if (ts=="m") { m=date[i];
} else if (ts=="y") { y=date[i]; }
} d=d.replace(/^0/,"");
if (d<10) { d="0"+d; }
if(/[a-z]/.test(m)) {
m=m.substr(0,3); switch(m) {
case "jan": m=String(1); break;
case "feb": m=String(2); break;
case "mar": m=String(3); break;
case "apr": m=String(4); break;
case "may": m=String(5); break;
case "jun": m=String(6); break;
case "jul": m=String(7); break;
case "aug": m=String(8); break;
case "sep": m=String(9); break;
case "oct": m=String(10); break;
case "nov": m=String(11); break;
case "dec": m=String(12); break;
default: m=String(0);
}
} m=m.replace(/^0/,""); if (m<10) { m="0"+m; }
y=parseInt(y); if (y<100) { y=parseInt(y)+2000; }
return ""+String(y)+""+String(m)+""+String(d)+"";
}