JS 实现表格列排序

来源:互联网 发布:对于网络直播你怎么看 编辑:程序博客网 时间:2024/06/04 18:47
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>表格排序的实现</title><style>* {font-family: Arial, Helvetica, sans-serif;font-size: 14px;border: none;}body {text-align: center;}table {margin: 100px auto;}td {width: 110px;height: 25px;text-align: center;line-height: 25px;border: 1px solid silver;}.red {color: red;}.top {background: #EEE;cursor: pointer;}.up {background: #FFFFCCurl(http://down.psd.cnhttp://p1.mb5u.com/allimg/080912/173019330.gif)no-repeat right 5px;}.down {background: #FFFFCCurl(http://down.psd.cnhttp://p1.mb5u.com/allimg/080912/173019334.gif)no-repeat right 5px;}.hov {background: #F0EFE5;}</style></head><body><table cellpadding="0" id="table"><tr class="top"><td>kick me</td><td>kick me</td><td>kick me</td><td>kick me</td></tr><tr><td><span id="bfn_la_bac.usa">15.43</span></td><td class="red">700</td><td>1.220</td><td class="red">源</td></tr><tr><td><span id="bfn_la_c.usa">7.05</span></td><td class="red">4</td><td>3,000</td><td class="red">码</td></tr><tr><td><span id="bfn_la_jpm.usa">30.62</span></td><td class="red">30</td><td>2,558,800</td><td class="red">爱</td></tr><tr><td><span id="bfn_la_axp.usa">22.30</span></td><td class="red">5</td><td>6</td><td class="red">好</td></tr><tr><td><span id="bfn_la_mrk.usa">26.31</span></td><td class="red">0.6</td><td>5</td><td class="red">-</td></tr><tr><td><span id="bfn_la_pg.usa">63.16</span></td><td class="red">7</td><td>4</td><td class="red">者</td></tr></table><script type="text/javascript">var tableSort = function() {this.initialize.apply(this, arguments);}tableSort.prototype = {initialize : function(tableId, clickRow, startRow, endRow, classUp,classDown, selectClass) {this.Table = document.getElementById(tableId);this.rows = this.Table.rows;//所有行this.Tags = this.rows[clickRow - 1].cells;//标签tdthis.up = classUp;this.down = classDown;this.startRow = startRow;this.selectClass = selectClass;this.endRow = (endRow == 999 ? this.rows.length : endRow);this.T2Arr = this._td2Array();//受影响的td二维数组this.setShow();},//标签切换setShow : function() {var defaultClass = this.Tags[0].className;for ( var Tag, i = 0; Tag = this.Tags[i]; i++) {Tag.index = i;addEventListener(Tag, 'click', Bind(Tag, statu));}var _this = this;var turn = 0;function statu() {for ( var i = 0; i < _this.Tags.length; i++) {_this.Tags[i].className = defaultClass;}if (turn == 0) {addClass(this, _this.down)_this.startArray(0, this.index);turn = 1;} else {addClass(this, _this.up)_this.startArray(1, this.index);turn = 0;}}},//选中列样式colClassSet : function(num, cla) {//得到关联到的tdfor ( var i = (this.startRow - 1); i < (this.endRow); i++) {for ( var n = 0; n < this.rows[i].cells.length; n++) {removeClass(this.rows[i].cells[n], cla);}addClass(this.rows[i].cells[num], cla);}},//开始排序  num 根据第几列排序  aord 逆序还是顺序startArray : function(aord, num) {var afterSort = this.sortMethod(this.T2Arr, aord, num);//排序后的二维数组传到排序方法中去this.array2Td(num, afterSort);//输出},//将受影响的行和列转换成二维数组_td2Array : function() {var arr = [];for ( var i = (this.startRow - 1), l = 0; i < (this.endRow); i++, l++) {arr[l] = [];for ( var n = 0; n < this.rows[i].cells.length; n++) {arr[l].push(this.rows[i].cells[n].innerHTML);}}return arr;},//根据排序后的二维数组来输出相应的行和列的 innerHTML array2Td : function(num, arr) {this.colClassSet(num, this.selectClass);for ( var i = (this.startRow - 1), l = 0; i < (this.endRow); i++, l++) {for ( var n = 0; n < this.Tags.length; n++) {this.rows[i].cells[n].innerHTML = arr[l][n];}}},//传进来一个二维数组,根据二维数组的子项中的w项排序,再返回排序后的二维数组sortMethod : function(arr, aord, w) {//var effectCol = this.getColByNum(whichCol);arr.sort(function(a, b) {x = killHTML(a[w]);y = killHTML(b[w]);x = x.replace(/,/g, '');y = y.replace(/,/g, '');switch (isNaN(x)) {case false:return Number(x) - Number(y);break;case true:return x.localeCompare(y);break;}});arr = aord == 0 ? arr : arr.reverse();return arr;}}/*-----------------------------------*/function addEventListener(o, type, fn) {if (o.attachEvent) {o.attachEvent('on' + type, fn)} else if (o.addEventListener) {o.addEventListener(type, fn, false)} else {o['on' + type] = fn;}}function hasClass(element, className) {var reg = new RegExp('(\\s|^)' + className + '(\\s|$)');return element.className.match(reg);}function addClass(element, className) {if (!this.hasClass(element, className)) {element.className += " " + className;}}function removeClass(element, className) {if (hasClass(element, className)) {var reg = new RegExp('(\\s|^)' + className + '(\\s|$)');element.className = element.className.replace(reg, ' ');}}var Bind = function(object, fun) {return function() {return fun.apply(object, arguments);}}//去掉所有的html标记function killHTML(str) {return str.replace(/<[^>]+>/g, "");}//------------------------------------------------//tableid  第几行是标签行,从第几行开始排序,第几行结束排序(999表示最后) 升序标签样式,降序标签样式  选中列样式//注意标签行的class应该是一致的var ex1 = new tableSort('table', 1, 2, 999, 'up', 'down', 'hov');</script></body></html>

原创粉丝点击