zoukankan      html  css  js  c++  java
  • javascript 表格排序

    知识点:

    Array方法:

       sort:降序

       reverse:反序

    效果:

    代码:

      1 <style>
      2 *{
      3     margin: 0;
      4     padding: 0;
      5 }
      6 #tableSort{
      7     line-height: 22px;
      8     background: #ccc;
      9 }
     10 #tableSort thead,
     11 #tableSort tfoot{
     12     background: #066;
     13     color: #fff;
     14     font-size: 14px;
     15 }
     16 #tableSort thead a,
     17 #tableSort tfoot a{
     18     color: #fff;
     19 }
     20 #tableSort tfoot{
     21     background: #069;
     22 }
     23 #tableSort tbody td{
     24     background: #fff;
     25     padding: 3px 5px;
     26     font-size: 12px;
     27 }
     28 </style>
     29 <table width="500" border="0" cellspacing="1" cellpadding="0" id="tableSort">
     30 <thead>
     31   <tr>
     32     <th width="31" align="center">&nbsp;</th>
     33     <th width="104">商品名称</th>
     34     <th width="104">商品描述</th>
     35     <th width="124" id="timeSort" _isDesc="false">上架时间</th>
     36     <th width="82"  id="priceSort" _isDesc="false">价格</th>
     37     <th width="48">操作</th>
     38   </tr>
     39   </thead>
     40   <tbody>
     41   <tr>
     42     <td align="center"><input type="checkbox" name="checkbox3" id="checkbox2" _op="check" /></td>
     43     <td>1</td>
     44     <td>12312312313</td>
     45     <td>2013-5-8</td>
     46     <td>¥120</td>
     47     <td align="center"><a href="javascript:void(0)" _op="del">删除</a></td>
     48   </tr>
     49   <tr>
     50     <td align="center"><input type="checkbox" name="checkbox4" id="checkbox3" _op="check" /></td>
     51     <td>2</td>
     52     <td>顶戴</td>
     53     <td>2013-5-12</td>
     54     <td>¥140</td>
     55     <td align="center"><a href="javascript:void(0)" _op="del">删除</a></td>
     56   </tr>
     57   <tr>
     58     <td align="center"><input type="checkbox" name="checkbox5" id="checkbox4" _op="check"  /></td>
     59     <td>3</td>
     60     <td>欠工</td>
     61     <td>2013-4-8</td>
     62     <td>¥320</td>
     63     <td align="center"><a href="javascript:void(0)" _op="del">删除</a></td>
     64   </tr>
     65   <tr>
     66     <td align="center"><input type="checkbox" name="checkbox6" id="checkbox5" _op="check"  /></td>
     67     <td>4</td>
     68     <td>七七</td>
     69     <td>2013-8-8</td>
     70     <td>¥520</td>
     71     <td align="center"><a href="javascript:void(0)" _op="del">删除</a></td>
     72   </tr>
     73   <tr>
     74     <td align="center"><input type="checkbox" name="checkbox7" id="checkbox6" _op="check" /></td>
     75     <td>5</td>
     76     <td></td>
     77     <td>2013-5-25</td>
     78     <td>¥820</td>
     79     <td align="center"><a href="javascript:void(0)" _op="del">删除</a></td>
     80   </tr>
     81   <tr>
     82     <td align="center"><input type="checkbox" name="checkbox8" id="checkbox7" _op="check" /></td>
     83     <td>6</td>
     84     <td>黄梅雨</td>
     85     <td>2013-5-2</td>
     86     <td>¥120</td>
     87     <td align="center"><a href="javascript:void(0)" _op="del">删除</a></td>
     88   </tr>
     89   <tr>
     90     <td align="center"><input type="checkbox" name="checkbox9" id="checkbox8" _op="check" /></td>
     91     <td>7</td>
     92     <td>工作服</td>
     93     <td>2013-5-18</td>
     94     <td>¥1220</td>
     95     <td align="center"><a href="javascript:void(0)" _op="del">删除</a></td>
     96   </tr>
     97   <tr>
     98     <td align="center"><input type="checkbox" name="checkbox10" id="checkbox9" _op="check" /></td>
     99     <td>8</td>
    100     <td>地茜共</td>
    101     <td>2013-3-8</td>
    102     <td>¥1260</td>
    103     <td align="center"><a href="javascript:void(0)" _op="del">删除</a></td>
    104   </tr>
    105   </tbody>
    106   <tfoot>
    107   <tr>
    108     <th align="center"><input type="checkbox" name="checkbox" id="checkAll" /></th>
    109     <th align="left"><a href="javascript:void(0)" id="reserveCheck" >反选</a>&nbsp;&nbsp;<a href="javascript:void(0)" id="delSelect">删除</a></th>
    110     <th align="left">&nbsp;</th>
    111     <th>&nbsp;</th>
    112     <th>&nbsp;</th>
    113     <th><a href="#"></a></th>
    114   </tr>
    115   </tfoot>
    116 </table>
    117 <script>
    118 //批量设置checked值
    119 function setChecked(checkBoxs,checked){
    120     for(var i=0,len=checkBoxs.length;i<len;i++){
    121         checkBoxs[i].checked=checked;
    122     }    
    123 }
    124 //批量反置checked值
    125 function reverseChecked(checkBoxs){
    126     for(var i=0,len=checkBoxs.length;i<len;i++){
    127         checkBoxs[i].checked=!checkBoxs[i].checked;    
    128     }    
    129 }
    130 //移除tr值
    131 function removeTr(tBody,tr){
    132     tBody.removeChild(tr);    
    133 }
    134 //获取tr
    135 function getParentTr(o){
    136     while(o){
    137         o=o.parentNode;
    138         if(o&&o.tagName==="TR"){
    139             return o;
    140         }
    141     }
    142 }
    143 //arrSort排序
    144 function arrSort(arr,isDesc){
    145     var arr=arr.sort(function(num1,num2){
    146         return num1-num2;                          
    147     });
    148     if(isDesc){//desc
    149         arr.reverse();
    150     }
    151     return arr;
    152 }
    153 //表格排序
    154 function tableSort(tablePart,col,fun,isDesc){
    155     var arrNum=[],trs={};
    156     
    157     for(var i=0,len=tablePart.rows.length;i<len;i++){
    158         var td=tablePart.rows[i].cells[col];
    159         var num=fun(td);    
    160         arrNum.push(num);
    161         trs["id"+num]=trs["id"+num]||[];
    162         trs["id"+num].push(getParentTr(td));        
    163     }
    164     arrNum=arrSort(arrNum,isDesc);    
    165     for(var j=0,jlen=arrNum.length;j<jlen;j++){
    166         for(var k=0,klen=trs["id"+arrNum[j]].length;k<klen;k++){
    167             var tr=trs["id"+arrNum[j]].pop();
    168             tablePart.appendChild(tr);
    169         }
    170     }
    171 }
    172 
    173 
    174 var table=document.getElementById("tableSort");
    175 var checkBoxs=table.tBodies[0].getElementsByTagName('input');
    176 var checkAll=document.getElementById("checkAll");
    177 var reserveCheck=document.getElementById("reserveCheck");
    178 var delSelect=document.getElementById("delSelect");
    179 var timeSort=document.getElementById("timeSort");
    180 var priceSort=document.getElementById("priceSort");
    181 
    182 checkAll.onclick=function(){
    183     setChecked(checkBoxs,this.checked);    
    184 }
    185 
    186 reserveCheck.onclick=function(){
    187     reverseChecked(checkBoxs);
    188 }
    189 table.tBodies[0].onclick=function(e){
    190     var ev=e||window.event;
    191     var target=ev.target||ev.srcElement;
    192     if(!target)return;
    193     target._op=target.getAttribute("_op");
    194     if(!target._op)return;
    195     
    196     if(target._op==="check"&&target.type==="checkbox"&&!target.checked){
    197         checkAll.checked=target.checked;    
    198     }
    199     if(target._op==="del"){
    200         var tr=getParentTr(target);
    201         removeTr(table.tBodies[0],tr);
    202     }
    203 }
    204 delSelect.onclick=function(){
    205     var chk=[];
    206     for(var i=0,len=checkBoxs.length;i<len;i++){            
    207         if(checkBoxs[i].checked){
    208             var tr=getParentTr(checkBoxs[i]);
    209             chk.push(tr);
    210         }    
    211     }    
    212 
    213 
    214     for(var j=0,jlen=chk.length;j<jlen;j++){
    215         removeTr(table.tBodies[0],chk[j]);
    216     }
    217 }
    218 var sortMark="↑↓";
    219 timeSort.onclick=function(){
    220     this.isDesc=(this.isDesc===true)?false:true;
    221     tableSort(table.tBodies[0],3,function(td){
    222         return (new Date(td.innerHTML)).getTime();                                      
    223     },this.isDesc);    
    224     priceSort.innerHTML="价格"
    225     this.innerHTML="上架时间"+sortMark[this.isDesc?1:0];
    226 }
    227 priceSort.onclick=function(){
    228     this.isDesc=(this.isDesc===true)?false:true;
    229     tableSort(table.tBodies[0],4,function(td){
    230         return parseInt(td.innerHTML.replace("",''));                                      
    231     },this.isDesc);    
    232     timeSort.innerHTML="上架时间";
    233     this.innerHTML="价格"+sortMark[this.isDesc?1:0];
    234 }
    235 
    236 </script>

    总结:

    完成了基本功能,对于联合排序没有实现。后期会慢慢加入,有兴趣的可以把代码放到html页面,运行查看效果。

  • 相关阅读:
    Java多线程-新特性-有返回值的线程
    Java多线程-新特性-线程池
    java多线程-慎重使用volatile关键字
    Java多线程-线程的调度(守护线程)
    Java多线程-线程的调度(合并)
    Java多线程-线程的调度(让步)
    Java多线程-线程的调度(优先级)
    Java多线程-线程的调度(休眠)
    Java多线程-线程的交互
    let 命令 与 var的区别
  • 原文地址:https://www.cnblogs.com/wengxuesong/p/3093307.html
Copyright © 2011-2022 走看看