- 这是一个利用JavaScript结合CSS实现的对表格进行排序的代码,点击表头会自动排序,至于由哪种规则排序这个由你决定,表格排序现在用的也非常多。此实例实现的是降序、升序排列。
点击(此处)折叠或打开
- <!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:#FFFFCC;}
- .down{background:#FFFFCC;}
- .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;//标签td
- this.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){
- //得到关联到的td
- for(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>
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29737856/viewspace-1242190/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29737856/viewspace-1242190/