html table表头排序功能

<!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: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(/upload/20090211095733175.gif) no-repeat right 5px;} 
.down{background:#FFFFCC url(/upload/20090211095734843.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;//标签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> 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以帮你编写一个HTML具有表头排序功能的表格。 首先,我们需要使用HTML表格标签来创建一个表格,并使用以下代码块来创建一个具有表头排序功能的表格: ```html <table id="myTable"> <thead> <tr> <th onclick="sortTable(0)">Name</th> <th onclick="sortTable(1)">Age</th> <th onclick="sortTable(2)">City</th> </tr> </thead> <tbody> <tr> <td>John</td> <td>25</td> <td>New York</td> </tr> <tr> <td>Doe</td> <td>30</td> <td>London</td> </tr> <tr> <td>Smith</td> <td>20</td> <td>Paris</td> </tr> </tbody> </table> ``` 在上面的代码中,我们使用了HTML表格标签来创建一个表格,并使用thead标签来创建表头。在表头中,我们使用th标签来创建每个表头单元格,并使用onclick属性来调用JavaScript函数sortTable()。在sortTable()函数中,我们可以实现表格排序的逻辑。 接下来,我们需要编写JavaScript函数sortTable()来实现表格排序。以下是一个示例函数: ```javascript function sortTable(n) { var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0; table = document.getElementById("myTable"); switching = true; dir = "asc"; while (switching) { switching = false; rows = table.getElementsByTagName("tr"); for (i = 1; i < (rows.length - 1); i++) { shouldSwitch = false; x = rows[i].getElementsByTagName("td")[n]; y = rows[i + 1].getElementsByTagName("td")[n]; if (dir == "asc") { if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) { shouldSwitch = true; break; } } else if (dir == "desc") { if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) { shouldSwitch = true; break; } } } if (shouldSwitch) { rows[i].parentNode.insertBefore(rows[i + 1], rows[i]); switching = true; switchcount ++; } else { if (switchcount == 0 && dir == "asc") { dir = "desc"; switching = true; } } } } ``` 在上面的代码中,我们首先获取表格和所有行,然后使用冒泡排序算法来实现表格排序。我们使用dir变量来跟踪表格排序的顺序,并在需要时更改它。我们还使用shouldSwitch变量来指示两行是否需要交换,以便正确排序。 最后,您可以将上述HTML和JavaScript代码复制并粘贴到HTML文件中,以创建具有表头排序功能的表格。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值