JavaScript写一个表格排序类
来源:互联网 发布:网络分销渠道的优势 编辑:程序博客网 时间:2024/06/06 19:46
依稀记得那是上个星期六的下午,我参加了网易暑期实习生招聘笔试。考得相当糟糕,编程题3个题通过了2个,简答题没做对,选择题貌似是20个题猜了6~7个,99%是挂了,唉唉唉!生活不只眼前的苟且,学习的脚步还得向前迈进。现在来做一做网易的简答题。
题目是这样的:一个表格有三列,分别是姓名、学号、成绩,要求点击成绩,则按成绩从高到低排列,再点击一次则从低到高,如此循环。啊呀呀!这个不就是简单的表格排序吗?是的,然而我错了。小学老师老师告诉我知错能改就是好孩子,不知道网易怎么看呢?管他怎么看,我先把错改了再说......于是乎,小弟写了一个表格排序类,可对任意列排序,网易啊网易啊,有没有看到,我不仅改错了,还拔高了。我的代码是这个样子的:
1 (function(){ 2 window.TableOrder = function(table){ 3 if(typeof table == "undefined"){ 4 throw new Error("params error"); 5 return ; 6 } 7 8 this.table = document.getElementById(table); 9 if(this.table == null){10 throw new Error("not found the table");11 return ;12 }13 }14 15 16 function order(col,direction,isNum){17 return function(tr1,tr2){18 var v1 = tr1.children[col].innerHTML;19 var v2 = tr2.children[col].innerHTML;20 if(isNum){21 try{22 v1 = parseFloat(v1);23 v2 = parseFloat(v2);24 }catch(e){25 throw new Error('illegal operation')26 }27 v1 = parseFloat(v1);28 v2 = parseFloat(v2);29 if(direction == "asc"){30 return v1-v2;31 }else{32 return v2-v1;33 }34 }else{35 if(direction == "asc"){36 return v1.localeCompare(v2);37 }else{38 return v2.localeCompare(v1);39 }40 }41 }42 }43 44 function changeEleToArr(ele){45 var trArr = [];46 for(var i = 0; i < ele.length; i++){47 trArr.push(ele[i]);48 }49 50 return trArr;51 }52 53 TableOrder.prototype.orderBy = function(col,isNum){54 var token = col.split(" ");55 if(token.length>2 || Number(token[0])=="NaN"){56 throw new Error("orderBy():params must be xx xx,true/false");57 return ;58 }59 60 var col = parseInt(token[0].trim());61 var direction = token[1].trim().toLowerCase();62 var isNum = typeof isNum =="undefined" ? false : isNum;63 var tbody = this.table.children[1]64 var tableChildren = tbody.children;//tr htmlCollection65 var tableChildrenArr = changeEleToArr(tableChildren);66 //order67 tableChildrenArr.sort(function(tr1,tr2){68 //当时就是这个位子错了,我不知道怎么把数据传进排序函数了69 //是不是有点悲哀70 //更悲哀的是他还不让测试71 return order(col,direction,isNum)(tr1,tr2)72 });73 74 //create newchildren75 var frag = document.createDocumentFragment();76 for(var i = 0; i < tableChildrenArr.length; i++){77 frag.appendChild(tableChildrenArr[i]);78 }79 //remove80 for(var i = 0; i < tableChildren.length; i++){81 tbody.removeChild(tableChildren[i]);82 }83 84 //add85 tbody.appendChild(frag);86 87 88 }89 })(window);
听说有了这个类,妈妈再也不用担心我不会表格排序了。这是真的吗?试试看!
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <table id="table" border="1"> <thead> <tr> <td>姓名</td> <td>性别</td> <td id="score">成绩</td> </tr> </thead> <tbody> <tr> <td>haha</td> <td>男</td> <td>55</td> </tr> <tr> <td>xixi</td> <td>女</td> <td>88</td> </tr> <tr> <td>hehe</td> <td>女</td> <td>11</td> </tr> </tbody> </table> <script type="text/javascript" src="orderTable.js"></script> <script type="text/javascript"> (function(window){ var isSort = false; var tableSort = new TableOrder("table") window.addEventListener("DOMContentLoaded",handler,false); function handler(e){ var score = document.getElementById("score"); score.addEventListener("click",function(e){ if(!isSort){ tableSort.orderBy("2 desc",true); isSort = !isSort; }else{ tableSort.orderBy("2 asc",true); isSort = !isSort; } },false) } })(window) </script></body></html>
来看一看效果,不点的时候是这样的
点一下是这样的
再点一下
哈哈,原来是真的,妈妈真的不用担心我的表格排序了。而且,可以对任意列进行排序,我们的orderBy()只用传进去两个参数,第一个参数是一个字符串,表示是对第几列排序(下标从0开始哦),还有是降序还是升序,desc表示降序,asc表示升序。比如“0 asc”就表示按第一列升序排列;第二个参数是一个布尔值,true表示你要按数字排序,false表示你要按字典排序。
阅读全文
0 0
- JavaScript写一个表格排序类
- javascript写的表格排序
- 4.19 javascript写一个日历(用表格写)
- javascript操作表格排序
- javaScript 实现表格排序
- Javascript表格排序
- JavaScript实现表格排序
- javascript表格排序
- JavaScript表格排序
- javascript表格列排序
- javascript页面表格排序
- javascript表格排序
- JavaScript实现表格排序
- JavaScript表格排序
- javascript页面表格排序
- JavaScript实现表格排序
- javascript 表格前端排序
- JavaScript 对表格排序
- hdu 5925 搜索
- Map集合遍历的两种方式
- Java实训第十二天8/09
- EventBus源码分析,以及手写实现EventBus核心框架
- Java运行时异常,非运行时异常
- JavaScript写一个表格排序类
- CSS基础布局--居中对齐,左侧定宽右侧自适应
- 网络图片资源设置转换为Bitmap
- 前端也得学学计算机网络呀
- AngularJS1.X学习笔记1-整体看看
- CBC Padding Oracle 攻击
- AngularJS1.X学习笔记2-数据绑定
- AngularJS1.X学习笔记3-内置模板指令
- 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?