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

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

如图所示:

 姓名  力量  敏捷  智力
 赵  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     }
时间: 2024-10-18 05:16:57

点击表头,实现表格内容的规则排序的相关文章

给一个文件里的内容按规则排序

report.txt文件里有以下内容:记录了一些方法的执行时间,要求按执行时间降序排列. void com.dustpan.zeus.core.service.MergeService.startService(int)|2void com.dustpan.zeus.core.service.InitShopDateService.startService(int)|1boolean com.dustpan.zeus.core.service.MergeService.executeGePrin

点击表头切换升降序排序方式

需求: 在报表的实际应用中有很多客户希望可以通过点击表头切换该列数据的排序. 实现方式: 超链接结合参数以及单元格表达式来实现,具体举例如下      原表样如下 实现原理:通过点击第一行任意格的值,通过 A2 单元格表达式控制排序 1. 首先在原报表中增加三个参数如下 2. 修改 A2 单元格表达式为  =ds1.select(EMPID;${macro1}:${macro2}) 3. 给需要通过点击表头排序的的报表头单元格设置超链接表达式,比如 : 我要点击 A1 单元格对 EMPID 排序

bootstrap-table 使用遇到的问题总结:1.右上角button样式自定义;2.右上角引用图标自定义;3.表头/表格内容显示不对齐;4.自定义设置表头及表格边框样式

问题一:右上角button样式自定义 方法: //修改bootstrap-table右上角按钮样式 $(".table-box .columns-right button").removeClass("btn-secondary").css({"backgroundColor": "#fafafa","border": "1px solid #c2c2c2","color&qu

MVC打印表格,把表格内容放到部分视图打印

假设在一个页面上有众多内容,而我们只想把该页面上的表格内容打印出来,window.print()方法会把整个页面的内容打印出来,如何做到只打印表格内容呢? 既然window.print()只会打印整页的内容,何不把表格放在一个部分视图中,在部分视图中再调用window.print()方法. Model很简单: public class Student { public int Id { get; set; } public string Name { get; set; } public dec

serialize()序列表表格内容为字符串。

序列表表格内容为字符串,用于 Ajax 请求 HTML 代码: <p id="results"><b>Results: </b> </p> <form>   <select name="single">     <option>Single</option>     <option>Single2</option>   </select>

jquery 表格排序,实时搜索表格内容

jquery 表格排序,实时搜索表格内容 演示 XML/HTML Code <table class="table-sort"> <thead> <tr> <th class="table-sort">First Name</th> <th class="table-sort">Last Name</th> <th class="table-sor

JSP点击表头排序

table.html <html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="tablesortT.js"></script> <link type="text/css" rel=&qu

jQuery实现点击文本框清除内容代码实例

jQuery实现点击文本框清除内容代码实例:本章节介绍一下文本框最简单的一个人性化措施,就是点击文本框的时候能够删除里面的提示文本.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title&g

easyui datagrid 点击表头的事件

在用datagrid的时候我们可能要用到点击表头来触发一个function,这里有个简单的例子. 首先你得有个能用的datagrid. <div>    <table id="toolbar"></table></div> 然后是js里的东西. function toolbar(){    alert("dd");    $("#toolbar").datagrid({        striped