• 点击表头,实现表格内容的规则排序


    描述:实现表格信息的排序功能,当点击表头的属性区域,将表格信息进行排序切换功能,即第一次点击为降序排序,再一次点击进行升序排序。

         如图所示:

     姓名  力量  敏捷  智力
     赵  17  34  13
     钱  15  22  16
     孙  19  15  20
     李  23  15  15

    接下来,首先绘制该表格,

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8"/>
     5     <title>表格排序</title>
     6 </head>
     7 <style type="text/css">
     8     table{
     9         width: 500px;
    10         height: 200px;
    11         position: relative;
    12         border-width: 0px 0px 1px 1px;
    13         border-style: solid;
    14     }  
    15     tr{
    16         height: 40px;
    17     }
    18     td,th{
    19         width: 25%;
    20          border-width: 1px 1px 0 0;
    21        border-style: solid;
    22         padding: 0;
    23         margin: 0;
    24     }
    25 </style>
    26 <body>
    27 <table id="table" cellpadding="1" cellspacing="1">//cellpadding 属性规定单元边沿与单元内容之间的空间,以像素计;     
    //请勿将该属性与cellspacing属性相混淆,cellspacing 属性规定的是单元之间的空间。
    28 <thead> 29 <tr bgcolor="grey"> 30 <th>姓名</th> 31 <th onclick="sortTable(1)">力量</th> 32 <th onclick="sortTable(2)">敏捷</th> 33 <th onclick="sortTable(3)">智力</th> 34 </tr> 35 </thead> 36 <tbody> 37 <tr> 38 <th></th> 39 <td>17</td> 40 <td>24</td> 41 <td>13</td> 42 </tr> 43 <tr> 44 <th></th> 45 <td>15</td> 46 <td>22</td> 47 <td>16</td> 48 </tr> 49 <tr> 50 <th></th> 51 <td>19</td> 52 <td>35</td> 53 <td>20</td> 54 </tr> 55 <tr> 56 <th></th> 57 <td>23</td> 58 <td>15</td> 59 <td>14</td> 60 </tr> 61 </tbody> 62 </table> 63 <script src="ceshi.js" type="text/javascript"></script> 64 </body> 65 </html>

    接下来,是对应的js实现:

     1 var isSort = [false,false,false];//标记是否排过序
     2     function sortTable (colNo) {
     3         var rowsArray = [];//表格中所有行的集合
     4         var colsArray = [];//表格中所有列的集合
     5         var tbody = document.getElementsByTagName('tbody')[0];
     6         //初始化行和列
     7         for (var i = 0; i < tbody.rows.length; i++) {
     8             rowsArray[i] = tbody.rows[i];
     9             colsArray[i] = rowsArray[i].cells[colNo];
    10         }
    11          
    12         //排序
    13         //console.log(isSort[colNo])     
    14         if (!isSort[colNo]) {//isSort为false时,降序排列
    15             isSort[colNo] = true;
    16             colsArray.sort(function (a,b) {
    17                 return b.innerHTML - a.innerHTML;//a、b表示数组的任意两个元素,如果return>0,则b前a后,反之则a前b后
    //例如:当点击
    第四列时,首先a=13,b=16,运算结果为b前a后;接下来a=13,b=20,因为b-a>0,之后b前a后,然后a=16,b=20,运算结果是b前a后,然后a=13,b=14,b-a>0,
    //b前a后,最后再比较a=16,b=14,此时b-a<0,不需要交换次序,排序停止
    //此处是 b.innerHTML - a.innerHTML,得到的结果是降序排列;
    //如果是 a.innerHTML - b.innerHTML,得到的结果是升序排列;
    18 }); 19 }else{ 20 //此时已经降序排序过了,对数组逆序即可 21 colsArray.reverse(); 22 isSort[colNo] = false; 23 } 24 //当某一列排序后将表格所有元素的值放到新的数组中 25 var rowsTempArray = []; 26 for (var i = 0; i < rowsArray.length; i++) { 27 var colsTempArray = []; 28 for (var j = 0; j < colsArray.length; j++) { 29 //将i行的所有列的内容保存在colsTempArray[j]中 30 colsTempArray[j] = colsArray[i].parentNode.cells[j].innerHTML;//colsArray[i].parentNode指的是当前行
    31 } 32 //将一行内容保存到rowsTempArray。 33 rowsTempArray[i] = colsTempArray; 34 } 35 //重绘页面 36 for (var i = 0; i < rowsArray.length; i++) { 37 for (var j = 0; j < colsArray.length; j++) { 38 rowsArray[i].cells[j].innerHTML = rowsTempArray[i][j]; 39 } 40 } 41 }
  • 相关阅读:
    vscode识别预览markdown文件
    工具:静态资源服务器server
    vscode配置easy sass 生成压缩和未压缩的css文件
    cocos Create简单记录
    小程序AR云识别
    小程序被冻结 解冻方法
    vscode设置px转换为rem
    js 打印文本
    .net 启动进程并执行某方法
    c# 创建文件夹、压缩成zip格式并下载
  • 原文地址:https://www.cnblogs.com/lujun1949/p/5924809.html
Copyright © 2020-2023  润新知