JavaScript实现表格排序方法
JavaScript实现表格排序方法
发布时间:2016-12-30 来源:查字典编辑
摘要:参考代码:复制代码代码如下:JavaScript控制网页内表格排序*{font-family:Arial,Helvetica,sans-se...

JavaScript实现表格排序方法1

参考代码:

复制代码 代码如下:

<!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>JavaScript控制网页内表格排序</title>

<style>

*{font-family:Arial, Helvetica, sans-serif;font-size:14px;border:none;}

body{text-align:center;}

table{margin:100px auto;}

td{width:100px;height:24px;text-align:center;line-height:24px;border:1px solid silver;}

.red{color:red;}

.top{background:#CCCCCC;cursor:pointer;}

.up{background:#FFFFCC url(up.gif) no-repeat right 5px;}

.down{background:#FFFFCC url(down.gif) no-repeat right 5px;}

.hov{background:#F0EFE5;}

</style>

</head>

<body>

<table cellpadding="0" id="table">

<tr><td>点击排序</td><td >点击排序</td><td>点击排序</td><td>点击排序</td></tr>

<tr>

<td><span id="bfn_la_bac.usa">15.43</span></td>

<td>700</td>

<td>1.220</td>

<td>www.corange.cn</td>

</tr>

<tr><td><span id="bfn_la_c.usa">7.05</span></td>

<td>4</td>

<td>3,000</td>

<td>asp</td>

</tr>

<tr><td><span id="bfn_la_jpm.usa">30.62</span></td>

<td>30</td>

<td>2,558,800</td>

<td>php</td>

</tr>

<tr>

<td><span id="bfn_la_axp.usa">22.30</span></td>

<td>5</td><td>6</td>

<td>js</td>

</tr>

<tr><td><span id="bfn_la_mrk.usa">26.31</span></td>

<td>0.6</td><td>5</td>

<td>网站开发</td>

</tr>

<tr><td><span id="bfn_la_pg.usa">63.16</span></td>

<td>7</td><td>4</td>

<td>子</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>

<br><br>

</body>

</html>

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类