本文实例讲述了jQuery实现带分组数据的Table表头排序。分享给大家供大家参考,具体如下:
如下图:
要求:点击表头排序时,"分组"及"分组明细"的数据层次关系不变
从网上找了一段常规的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" /> <style type="text/css"> .tbl-list, .tbl-list td, .tbl-list th { border: solid 1px #000; border-collapse: collapse; padding: 10px; margin: 15px; } </style> <script type="text/javascript" src="jquery.min.js"></script> <title>table sort</title> <script type="text/javascript"> //排序 tableId: 表的id,iCol:第几列 ;dataType:iCol对应的列显示数据的数据类型 function sortAble(th, tableId, iCol, dataType) { var ascChar = "▲"; var descChar = "▼"; var table = document.getElementById(tableId); //排序标题加背景色 for (var t = 0; t < table.tHead.rows[0].cells.length; t++) { var th = $(table.tHead.rows[0].cells[t]); var thText = th.html().replace(ascChar, "").replace(descChar, ""); if (t == iCol) { th.css("background-color", "#ccc"); } else { th.css("background-color", "#fff"); th.html(thText); } } var tbody = table.tBodies[0]; var colRows = tbody.rows; var aTrs = new Array; //将得到的行放入数组,备用 for (var i = 0; i < colRows.length; i++) { //注:如果要求“分组明细不参与排序”,把下面的注释去掉即可 //if ($(colRows[i]).attr("group") != undefined) { aTrs.push(colRows[i]); //} } //判断上一次排列的列和现在需要排列的是否同一个。 var thCol = $(table.tHead.rows[0].cells[iCol]); if (table.sortCol == iCol) { aTrs.reverse(); } else { //如果不是同一列,使用数组的sort方法,传进排序函数 aTrs.sort(compareEle(iCol, dataType)); } var oFragment = document.createDocumentFragment(); for (var i = 0; i < aTrs.length; i++) { oFragment.appendChild(aTrs[i]); } tbody.appendChild(oFragment); //记录最后一次排序的列索引 table.sortCol = iCol; //给排序标题加“升序、降序” 小图标显示 var th = $(table.tHead.rows[0].cells[iCol]); if (th.html().indexOf(ascChar) == -1 && th.html().indexOf(descChar) == -1) { th.html(th.html() + ascChar); } else if (th.html().indexOf(ascChar) != -1) { th.html(th.html().replace(ascChar, descChar)); } else if (th.html().indexOf(descChar) != -1) { th.html(th.html().replace(descChar, ascChar)); } //重新整理分组 var subRows = $("#" + tableId + " tr[parent]"); for (var t = subRows.length - 1; t >= 0 ; t--) { var parent = $("#" + tableId + " tr[group='" + $(subRows[t]).attr("parent") + "']"); parent.after($(subRows[t])); } } //将列的类型转化成相应的可以排列的数据类型 function convert(sValue, dataType) { switch (dataType) { case "int": return parseInt(sValue, 10); case "float": return parseFloat(sValue); case "date": return new Date(Date.parse(sValue)); case "string": default: return sValue.toString(); } } //排序函数,iCol表示列索引,dataType表示该列的数据类型 function compareEle(iCol, dataType) { return function (oTR1, oTR2) { var vValue1 = convert(removeHtmlTag($(oTR1.cells[iCol]).html()), dataType); var vValue2 = convert(removeHtmlTag($(oTR2.cells[iCol]).html()), dataType); if (vValue1 < vValue2) { return -1; } else { return 1; } }; } //去掉html标签 function removeHtmlTag(html) { return html.replace(/<[^>]+>/g, ""); } //jQuery加载完以后,分组行高亮背景,分组明细隐藏 $(document).ready(function () { $("tr[group]").css("background-color", "#ff9"); $("tr[parent]").hide(); }); //点击分组行时,切换分组明细的显示/隐藏 function showSub(a) { var groupValue = $(a).parent().parent().attr("group"); var subDetails = $("tr[parent='" + groupValue + "']"); subDetails.toggle(); } </script> </head> <body> <table id="tableId" class="tbl-list" cellpadding="0" cellspacing="0"> <thead> <tr> <th>序号</th> <th onclick="sortAble(this,'tableId', 1,'string')" style="cursor:pointer">姓名</th> <th onclick="sortAble(this,'tableId', 2, 'date')" style="cursor:pointer">生日</th> <th onclick="sortAble(this,'tableId', 3, 'int')" style="cursor:pointer">年龄</th> <th onclick="sortAble(this,'tableId', 4, 'float')" style="cursor:pointer">工资</th> </tr> </thead> <tbody> <tr group="A"> <td>1</td> <td><a href="#" onclick="showSub(this)">Group-A</a></td> <td>01/12/1982</td> <td>25</td> <td>1000.50</td> </tr> <tr parent="A"> <td>2</td> <td>A-01</td> <td>01/09/1982</td> <td>25</td> <td>2000.10</td> </tr> <tr parent="A"> <td>3</td> <td>A-02</td> <td>01/10/1982</td> <td>26</td> <td>2000.20</td> </tr> <tr group="B"> <td>4</td> <td><a href="#" onclick="showSub(this)">Group-B</a></td> <td>10/14/1999</td> <td>18</td> <td>1000.20</td> </tr> <tr parent="B"> <td>5</td> <td>B-01</td> <td>02/12/1982</td> <td>19</td> <td>3000.20</td> </tr> <tr parent="B"> <td>6</td> <td>B-02</td> <td>03/12/1982</td> <td>20</td> <td>3000.30</td> </tr> <tr group="C"> <td>7</td> <td><a href="#" onclick="showSub(this)">Group-C</a></td> <td>10/14/1980</td> <td>8</td> <td>1000.30</td> </tr> <tr parent="C"> <td>8</td> <td>C-01</td> <td>03/12/1981</td> <td>17</td> <td>3100.30</td> </tr> </tbody> </table> </body> </html>
希望本文所述对大家jQuery程序设计有所帮助。
本文向大家介绍php选择排序法实现数组排序实例分析,包括了php选择排序法实现数组排序实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了php选择排序法实现数组排序的方法。分享给大家供大家参考。具体分析如下: 选择排序法的基本思路:直接用案例来说明吧,比如有一个数组$arr = array(2,6,3,9),从大到小排序。 第一次大循环:它首先假设$arr[0]为最大值,然后分别跟$
本文向大家介绍JS实现json数组排序操作实例分析,包括了JS实现json数组排序操作实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS实现json数组排序操作。分享给大家供大家参考,具体如下: 有时需要根据json对象的某个属性排序json数组,javascript端有sort这个函数,具体可以参考:http://www.w3school.com.cn/jsref/jsref_
本文向大家介绍jquery实现的table排序功能示例,包括了jquery实现的table排序功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jquery实现的table排序功能。分享给大家供大家参考,具体如下: 运行效果图如下: 更多关于jQuery相关内容感兴趣的读者可查看本站专题:《jQuery表格(table)操作技巧汇总》、《jQuery切换特效与技巧总结》、《jQuer
本文向大家介绍PHP中数组的分组排序实例,包括了PHP中数组的分组排序实例的使用技巧和注意事项,需要的朋友参考一下 PHP的数组,数组中的内容大致如下: 为了方便表达,我把3列数字分别称为,ABC三列 需求:默认以A列排序为主,如果A列相同则以C列倒序排列相同的元素。B列其实没有参与排序,但是在实际运用中有用,所以我也写出来了。 方法一: 方法二:
本文向大家介绍javascript数组随机排序实例分析,包括了javascript数组随机排序实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript数组随机排序实现方法。分享给大家供大家参考。具体如下: 我们就测试0-9的随机排序,先生成数据 正常排序后的数组元素:0,1,2,3,4,5,6,7,8,9 定义一个随机函数,随机返回正数或者负数,sort函数将根据随机返
本文向大家介绍JS数组排序方法实例分析,包括了JS数组排序方法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS数组排序方法。分享给大家供大家参考,具体如下: 方法一.冒泡排序 思路:依次比较数组中的第一个元素和第二个元素,如果第一个元素大于第二个元素,则交换位置,所以需要两个函数:交换位置函数和比较函数 比较轮数为数组长度 方法二.选择排序 从数组中找到最小值,扔到数组第一位,