描述:实现表格信息的排序功能,当点击表头的属性区域,将表格信息进行排序切换功能,即第一次点击为降序排序,再一次点击进行升序排序。
如图所示:
姓名 | 力量 | 敏捷 | 智力 |
赵 | 17 | 34 | 13 |
钱 | 15 | 22 | 16 |
孙 | 19 | 15 | 20 |
李 | 23 | 15 | 15 |
接下来,首先绘制该表格,
1 2 3 4 5表格排序 6 7 26 27
姓名 | 31力量 | 32敏捷 | 33智力 | 34
---|---|---|---|
赵 | 3917 | 4024 | 4113 | 42
钱 | 4515 | 4622 | 4716 | 48
孙 | 5119 | 5235 | 5320 | 54
李 | 5723 | 5815 | 5914 | 60
接下来,是对应的js实现:
1 var isSort = [false,false,false];//标记是否排过序 2 function sortTable (colNo) { 3 var rowsArray = [];//表格中所有行的集合 4 var colsArray = [];//表格中所有列的集合 5 var tbody = document.getElementsByTagName('tbody')[0]; 6 //初始化行和列 7 for (var i = 0; i < tbody.rows.length; i++) { 8 rowsArray[i] = tbody.rows[i]; 9 colsArray[i] = rowsArray[i].cells[colNo];10 }11 12 //排序13 //console.log(isSort[colNo]) 14 if (!isSort[colNo]) { //isSort为false时,降序排列15 isSort[colNo] = true;16 colsArray.sort(function (a,b) {17 return b.innerHTML - a.innerHTML;//a、b表示数组的任意两个元素,如果return>0,则b前a后,反之则a前b后 //例如:当点击第四列时,首先a=13,b=16,运算结果为b前a后;接下来a=13,b=20,因为b-a>0,之后b前a后,然后a=16,b=20,运算结果是b前a后,然后a=13,b=14,b-a>0, //b前a后,最后再比较a=16,b=14,此时b-a<0,不需要交换次序,排序停止 //此处是 b.innerHTML - a.innerHTML,得到的结果是降序排列; //如果是 a.innerHTML - b.innerHTML,得到的结果是升序排列; 18 });19 }else{20 //此时已经降序排序过了,对数组逆序即可21 colsArray.reverse();22 isSort[colNo] = false;23 }24 //当某一列排序后将表格所有元素的值放到新的数组中25 var rowsTempArray = [];26 for (var i = 0; i < rowsArray.length; i++) {27 var colsTempArray = [];28 for (var j = 0; j < colsArray.length; j++) {29 //将i行的所有列的内容保存在colsTempArray[j]中30 colsTempArray[j] = colsArray[i].parentNode.cells[j].innerHTML;//colsArray[i].parentNode指的是当前行 31 }32 //将一行内容保存到rowsTempArray。33 rowsTempArray[i] = colsTempArray;34 }35 //重绘页面36 for (var i = 0; i < rowsArray.length; i++) {37 for (var j = 0; j < colsArray.length; j++) {38 rowsArray[i].cells[j].innerHTML = rowsTempArray[i][j]; 39 }40 }41 }