用js实现table排序

关于js实现table排序的问题!

问题描述:

           或许大家都碰到过这样一个问题,从数据库中得到一系列的数据,显示在页面上,有时候根据客服的要求我们需要对显示出来的数据进行实时排序(有n行n列,当点击其中一行头的时候所用数据按此列升序或者降序排列),当然从数据库中去数据然后进行排无愧是其中一个办法,但是试想一下,每次排序都要进行数据库查询,不但加重了服务器端的负担,响应时间也变的 相对缓慢。为此使用javascript解决无疑是中很好的方法

解决办法及源码:

        排序js

 1.   sort.js

 

/**
 * table排序
 * anthor liueh
 
*/

function    JM_PowerList(colNum)   
  
{   
  headEventObject
=event.srcElement;//取得引发事件的对象   
  while(headEventObject.tagName!="TR")   //不是tr行,则从底下的td冒泡上来寻找到相应行   
  {   
  headEventObject
=headEventObject.parentElement;   
  }
   
    
  
for   (i=0;i<headEventObject.children.length;i++)   
  
{   
  
if   (headEventObject.children[i]!=event.srcElement)//找到事件发生的td单元格   
  {   
  headEventObject.children[i].className
='listTableHead';//把点击的列的className属性设为listTableHead   
  }
   
  }
   
    
  
var   tableRows=0;   
  trObject
=clearStart.children[0].children;   //取得表格中行对象,   原来这里叫DataTable,   可能是你写错了吧??   
  for   (i=0;i<trObject.length;i++)   
  
{   
  Object
=clearStart.children[0].children[i];//取得每行的对象   
  tableRows=(trObject[i].id=='ignore')?tableRows:tableRows+1;//如果不是忽略行,则行数加一   
  }
   
    
  
var   trinnerHTML=new   Array(tableRows);     
  
var   tdinnerHTML=new   Array(tableRows);   
  
var   tdNumber=new   Array(tableRows)   
  
var   i0=0   
  
var   i1=0   
  
for   (i=0;i<trObject.length;i++)   
  
{   
  
if   (trObject[i].id!='ignore')   
  
{   
  trinnerHTML[i0]
=trObject[i].innerHTML;//把行放在数组里   
  tdinnerHTML[i0]=trObject[i].children[colNum].innerHTML;//把要排序的行中td的内容放数组里   
  tdNumber[i0]=i;//行号   
  i0++;//加一,下个循环用   
  }
   
  }
   
  sourceHTML
=clearStart.children[0].outerHTML;//取得表格中所有tr的html代码   
    
  
//对所有td中的字符串进行排序,   算不算冒泡排序???   
  for   (bi=0;bi<tableRows;bi++)   
  
{   
  
for   (i=0;i<tableRows;i++)   
  
{   
  
if(tdinnerHTML[i]>tdinnerHTML[i+1])   
  
{   
  t_s
=tdNumber[i+1];   
  t_b
=tdNumber[i];   
  tdNumber[i
+1]=t_b;   
  tdNumber[i]
=t_s;   
  temp_small
=tdinnerHTML[i+1];   
  temp_big
=tdinnerHTML[i];   
  tdinnerHTML[i
+1]=temp_big;   
  tdinnerHTML[i]
=temp_small;   
  }
   
  }
   
  }
   
    
    
    
  
var   showshow='';   
  
var   numshow='';   
  
for   (i=0;i<tableRows;i++)   
  
{   
  showshow
=showshow+tdinnerHTML[i]+' ';//把排序好的td的内容存在showshow字串里   
  numshow=numshow+tdNumber[i]+'|';             //把排序好的相应的行号也存在numshow中   
  }
   
    
  sourceHTML_head
=sourceHTML.split("<TBODY>");//从<TBODY>截断,我试了,前头串为空   
    
  numshow
=numshow.split("|");   
  
var   trRebuildHTML='';   
  
if   (event.srcElement.className=='listHeadClicked')   
  
{//已点击的列,   则逆排   
  for   (i=0;i<tableRows;i++)   
  
{   
  trRebuildHTML
=trRebuildHTML+trObject[numshow[tableRows-1-i]].outerHTML;//取出排序好的tr的内容连接起来   
    
  }
   
  event.srcElement.className
='listHeadClicked0';   
  }
   
  
else   
  
{//默认顺排,新点击顺排   
  for   (i=0;i<tableRows;i++)   
  
{   
  trRebuildHTML
=trRebuildHTML+trObject[numshow[i]].outerHTML;   
  }
   
  event.srcElement.className
='listHeadClicked';   
  }
   
  
//取得排序后的tr集合结果字符串   
  var   DataRebuildTable='';   
  
//把旧的表格头和新的tr排序好的元素连接起来,   (修改了一下)   
  DataRebuildTable   =   "<table   border=1 width=100%  cellpadding=1 cellspacing=1 id='clearStart'><TBODY>"   +   trObject[0].outerHTML   +   trRebuildHTML   +   "</TBODY>"   +     
    
  
"</table>";   
  clearStart.outerHTML
=DataRebuildTable;//表格用新串重新写一次   
    
  }
   

 

 

2.网页文件

 

< head >
    
< title > MyHtml.html </ title >
 
    
< meta  http-equiv ="keywords"  content ="keyword1,keyword2,keyword3" >
    
< meta  http-equiv ="description"  content ="this is my page" >
    
< meta  http-equiv ="content-type"  content ="text/html; charset=UTF-8" >
    
    
<!-- <link rel="stylesheet" type="text/css" href="./styles.css"> -->

   
< script  src ="sort.js"  language ="javascript" ></ script >

  
</ head >
< table  border =1  id ="clearStart" >
 
< tr  bgcolor =cccccc  id ='ignore' >
  
< td  onclick ="JM_PowerList(0)" > 列一
  
</ td >
  
< td  onclick ="JM_PowerList(1)" >
   列二
  
</ td >
  
< td  onclick ="JM_PowerList(2)" >
   列二
  
</ td >
 
</ tr >
  
< tr >
  
< td >
   周
  
</ td >
  
< td >
   公务员
  
</ td >
  
< td >
   22
  
</ td >
 
</ tr >
 
< tr >
  
< td >
   张三
  
</ td >
  
< td >
   研究员
  
</ td >
  
< td >
   65
  
</ td >
 
</ tr >
 
< tr >
  
< td >
   李思
  
</ td >
  
< td >
   科学家
  
</ td >
  
< td >
   24
  
</ td >
 
</ tr >
 
< tr >
  
< td >
  王武
  
</ td >
  
< td >
   社会学家
  
</ td >
  
< td >
   38
  
</ td >
 
</ tr >
</ table >

3,sort.js和网页文件需放在同级目录下

4.完成

 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值