sortable table with HTML and javascript
Is table should be sortable? Yes, of course.
I had a boring and frustrated afternoon, to kill my time, I wrote some code to do this.
<html> <head> <script> function initiateTableSort(){ var vTables = document.getElementsByTagName("table"); var i; for( i in vTables ){ var vFirstRow = vTables[ i ].rows[ 0 ]; var j; for( j in vFirstRow.cells ){ vFirstRow.cells[ j ].onclick=doTableSort; vFirstRow.cells[ j ].ondblclick=doTableSort; } } } var iTeBeCompared = 0; function doTableSort( e ){ var vTargetTable = e.target; while( vTargetTable.nodeName != "TABLE" ) vTargetTable = vTargetTable.parentNode; var vTR = vTargetTable.rows[ 0 ]; var i = e.target.cellIndex; var j; iToBeCompared = i; var vTRs = new Array(); for( i = 1; i < vTargetTable.rows.length; i ++ ){ var vRowData = new Array(); var cells = vTargetTable.rows[ i ].cells; for( j = 0; j < cells.length; j++ ){vRowData[ j ] = cells[ j ].innerHTML;} vTRs[ i - 1 ] = vRowData; } if( e.type=="click") vTRs.sort( sortRoutineDes ); else vTRs.sort( sortRoutineAs ); for( i = 0 ; i < vTRs.length; i ++ ){ for(j = 0 ; j < vTRs[ 0 ].length; j ++ ) vTargetTable.rows[ i + 1 ].cells[ j ].innerHTML = vTRs[ i ][ j ]; } } function sortRoutineDes( a, b ){ return (a[iToBeCompared] > b[iToBeCompared])? -1:1; } function sortRoutineAs( a, b ){ return (a[iToBeCompared] < b[iToBeCompared])? -1:1; } </script> </head> <body onload="initiateTableSort()"> <table border= "1"> <tr> <th>a</th><th>b</th><th>c</th> </tr> <tr> <td>x1</td><td>3</td><td>1</td> </tr> <tr> <td>a2</td><td>2</td><td>2</td> </tr> <tr> <td>a3</td><td>4</td><td>3</td> </tr> <tr> <td>a3</td><td>1</td><td>3</td> </tr> <tr> <td>a3</td><td>7</td><td>3</td> </tr> <tr> <td>a3</td><td>8</td><td>3</td> </tr> <tr> <td>a3</td><td>0</td><td>3</td> </tr> <tr> <td>a3</td><td>9</td><td>3</td> </tr> </table> </body> </html>
Labels: javascript, table
2 Comments:
This comment has been removed by a blog administrator.
This comment has been removed by a blog administrator.
Post a Comment
<< Home