-
这是一个利用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博客 ” ,链接:https://blog.itpub.net/29737856/viewspace-1242190/
,如需转载,请注明出处,否则将追究法律责任。