function $(id) { return (typeof(id)=="string")?document.getElementById(id):id; } //传递参数为表格的ID,列号,该列的数据类型 var sortTable = function(id,colNum,DataType,event){ this.event = event; this.table = $(id); //得到要排序的表格 this.firstRow = this.table.rows[0]; //得到表格的第一行 也就是标题 this.firstCells = this.firstRow.cells; //得到表格的每一个单元格 this.colNum = colNum; //排序的列 this.DataType = DataType; //数据类型 this.tbody = this.table.tBodies[0]; //得到表格的内容 非表头 this.rows = this.tbody.rows; //内容的行数 this.downClass = "down"; //降序排序时表头的样式 this.upClass = "up"; //升序排序时表头的样式 this.trArray = new Array; //存放每一行的内容 this.defaultClass = ""; this.format(); //将表格数据装到数组中 } sortTable.prototype = { //将表格数据格式化到数组中 format:function() { for(var i=0;i<this.rows.length;i++) { this.trArray[i] = this.rows[i]; } this.judge(); }, //判断是否是上一次排序的列 judge:function() { var tag = ""; for(var i=0;i<this.firstCells.length;i++) { if(i == this.colNum) { tag = this.firstCells[i]; if(turn) { this.addClass(tag,this.upClass); turn = false; } else { this.addClass(tag,this.downClass); turn = true; } } else { this.addClass(this.firstCells[i],""); } } if(this.table.index == this.colNum) { this.trArray.reverse(); } else { //调用排序函数 传递参数 升序或者降序 this.trArray.sort(this.getcreateSort(this.colNum,this.DataType)); } this.createDom(); }, //创建转换过程 getcreateSort:function(colNum,datatype) { return function createSort(a,b) { var first = a.cells[colNum].firstChild.nodeValue; var second = b.cells[colNum].firstChild.nodeValue; var value1 = convert(first,datatype); var value2 = convert(second,datatype); if(value1 < value2) { return -1; } else if(value1 > value2) { return 1; } else { return 0; } }; function convert(value,type) { switch(type) { case "int":return parseInt(value);break; case "float":return parseFloat(value);break; case "string":return value.toString();break; case "data":return new Date(Date.parse(value));break; default:return value.toString();break; } } }, createDom:function() { var frag = document.createDocumentFragment(); for(var i=0;i<this.trArray.length;i++) { frag.appendChild(this.trArray[i]); } this.tbody.appendChild(frag); this.table.index = this.colNum; //用作后面判断用 }, addClass:function(obj,classname) { obj.className = classname; } }
html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>简易表格排序</title> <link rel="stylesheet" href="sort.css" type="text/css"> <script type="text/javascript" src="tableSort.js"></script> <script type="text/javascript"> var turn = true; </script> </head> <body> <table border="1" width="400" id="sortTable" align="center"> <thead> <tr id="head"> <th onclick="new sortTable('sortTable','0','string',event)">姓名</th> <th onclick="new sortTable('sortTable','1','string',event)">性别</th> <th onclick="new sortTable('sortTable','2','int',event)">年龄</th> <th onclick="new sortTable('sortTable','3','date',event)">生日</th> </tr> </thead> <tbody id="body"> <tr> <td>陈超</td> <td>男</td> <td>21</td> <td>1988-8-18</td> </tr> <tr> <td>小陈</td> <td>女</td> <td>18</td> <td>1989-3-18</td> </tr> <tr> <td>小徐</td> <td>女</td> <td>28</td> <td>1989-3-22</td> </tr> <tr> <td>小猪</td> <td>男</td> <td>12</td> <td>2000-8-19</td> </tr> <tr> <td>重庆</td> <td>男</td> <td>20</td> <td>2000-8-18</td> </tr> </tbody> </table> </body> </html>