jQuery实现带分组数据的Table表头排序实例分析

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • 针对后台列表table拖拽比较实用的jquery拖动排序

    现在很多后台列表为了方便均使用拖拽排序的功能,对列表进行随意的排序. 话不多说 ,我在网上找了一些demo,经过对比,现在把方便实用的一个demo列出来,基于jqueryUI.js 先上html代码,很简单: 复制代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jqueryUI拖动</title>

  • jquery实现的鼠标拖动排序Li或Table

    1.前端页面 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="拖动排序Li或Table.aspx.cs" Inherits="拖动排序Li或Table" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http

  • jQuery利用sort对DOM元素进行排序操作

    前言 排序对于我们是再熟悉不过了,在绝大数应用程序中都会有这样一个场景:当我们从服务器端获取一个列表时,在界面上进行渲染,我们可以会依赖于某一个规则来进行排序,当然此时绝大多数会再次与服务器进行交互来进行重新渲染列表到客户端,这样做未尝不可,但是在有些情况下,我们既不需要利用框架也不需要重新生成列表到客户端,明明可以在客户端进行,达到我们的目的,为何要再一次发送请求到服务器呢?下面我们来看看. 话题 我们首先看看在w3c中js的sort方法. <script type="text/java

  • JQuery 构建客户/服务分离的链接模型中Table中的排序分析

    但在这个模型中,由于不能利用这些控件,我们需要借助纯Javascript和html静态代码来实现,感觉好像挺麻烦的?其实呢......分页代码既然由Webservice接口服务端中间层处理好回传回来,那么我们的排序代码也可以这样的,只是在回传前进行排序就ok了,下面就分析一下. 看过上篇的文章,可以知道在Webservice接口服务端中间层处理数据是操纵泛型的List对象 代码 复制代码 代码如下: List<TB_WEB_NZ_INVESTMENT> list = new List<T

  • jquery实现的table排序功能示例

    本文实例讲述了jquery实现的table排序功能.分享给大家供大家参考,具体如下: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" co

  • jquery对table做排序操作的实例演示

    最近要对报表数组进行排序,在前端处理如下: 首先在前台页面加载时对每行tr添加自定义的属性data-sort-field-ftime,属性值为要排序的字段的值(我的是数字比较方便): $.each(jsonarray, function(i, obj) { troptions += "<tr data-sort-field-ftime=\""+obj.paiming+"\">"; troptions += "<td&g

  • jQuery排序插件tableSorter使用方法

    本文实例为大家分享了jQuery排序插件tableSorter的使用方法,供大家参考,具体内容如下 1.先引两个js <script type="text/javascript" src="../js/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="../js/jquery.tablesorter.min.js"

  • jQuery html表格排序插件tablesorter使用方法详解

    tablesort是一款很好用的jQuery表格排序插件. 支持多种数据类型排序,会自动识别表格内容数据类型,使用也非常方便. 使用jQuery tablesort实现html表格方法: 1. 下载jQuery和tablesort脚本,并在html中引用该脚本文件: <script type="text/javascript" src="../jquery-latest.js"></script> <script type="

  • javascript实现对表格元素进行排序操作

    我们在上网中都能看到很多能够排序的,如大小.时间.价格等 现在我们也试一下排序功能: 排序的函数代码:里面含有点击之后排序--还原,和排升序和降序. function sortAge(){ //对年龄进行排序,要先进行获得每一行对象,然后对象对象中的第一个(从0 开始)的大小进行排序 var tabNode = document.getElementById("tabid"); var rows0 = tabNode.rows; var rows1 = []; //现将元素拷贝一份出来

  • jQuery实现带分组数据的Table表头排序实例分析

    本文实例讲述了jQuery实现带分组数据的Table表头排序.分享给大家供大家参考,具体如下: 如下图: 要求:点击表头排序时,"分组"及"分组明细"的数据层次关系不变 从网上找了一段常规的table排序,改了改,以满足"分组支持",贴在这里备份 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/T

  • JQuery ztree带筛选、异步加载实例讲解

    本文实例分享了JQuery ztree带筛选.异步加载实例,供大家参考,具体内容如下 <html> < head> < base href="<%=basePath%>"> <title>My JSP 'ztree.jsp' starting page</title> <link rel="stylesheet" href="zTrees/css/zTreeStyle/zTree

  • JQuery Ajax动态加载Table数据的实例讲解

    我们在jsp定义一个select和一个table,要求实现根据select的选值,动态加载table数据. <select id="type" name="type" onchange="reloadTable(this)"></select> <table id="import-table" class="table table-striped table-bordered table

  • C#数组反转与排序实例分析

    本文实例分析了C#数组反转与排序的方法.分享给大家供大家参考.具体实现方法如下: C#数组反转 复制代码 代码如下: using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;    namespace 数据反转  {      class Program      {          static void Main(string[] args)          {    

  • js表格排序实例分析(支持int,float,date,string四种数据类型)

    本文实例讲述了js表格排序的方法.分享给大家供大家参考.具体如下: <html> <head> <title>SortTable2</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript"> var k=0; /**//*

  • javascript操作表格排序实例分析

    本文实例讲述了javascript操作表格排序的方法.分享给大家供大家参考.具体如下: 完整例子如下: <html> <head> <title>Table Sort Example</title> <script type="text/javascript"> //转换器,将列的字段类型转换为可以排序的类型:String,int,float function convert(sValue, sDataType) { swit

  • JQuery中DOM加载与事件执行实例分析

    本文实例讲述了JQuery中DOM加载与事件执行原理.分享给大家供大家参考.具体分析如下: JavaScript和HTML之间的交互是通过用户和浏览器操作页面时引发的事件来处理的.当文档或者它的某些元素发生某些变化或操作时,浏览器会自动生成一个事件.例如当浏览器装载完一个文档后,会生成事件:当用户单击某个按钮时,也会生成事件.虽然利用传统的JavaScript事件能完成这些交互,但jQuery增加并扩展了基本的事件处理机制.jQuery不仅提供了更加优雅的事件处理语法,而且极大地增强了事件处理能

  • jQuery中each遍历的三种方法实例分析

    本文实例讲述了jQuery中each遍历的三种方法.分享给大家供大家参考,具体如下: 1.选择器+遍历 $('div').each(function (i){ //i就是索引值 //this 表示获取遍历每一个dom对象 }); 2.选择器+遍历 $('div').each(function (index,domEle){ //index就是索引值 //domEle 表示获取遍历每一个dom对象 }); 3.更适用的遍历方法 1)先获取某个集合对象 2)遍历集合对象的每一个元素 var d=$(

  • javascript数组随机排序实例分析

    本文实例讲述了javascript数组随机排序实现方法.分享给大家供大家参考.具体如下: 我们就测试0-9的随机排序,先生成数据 var arr=[9,3,1,2,5,8,4,7,6,0]; arr.sort(); document.write("正常排序后的数组元素:"+arr.join(",")+"<BR />"); 正常排序后的数组元素:0,1,2,3,4,5,6,7,8,9 定义一个随机函数,随机返回正数或者负数,sort函数

  • C#选择法排序实例分析

    本文实例讲述了C#选择法排序实现方法.分享给大家供大家参考.具体实现方法如下: public int[] SelectionSort(int[] arr) { //1. Find min //2. Swap it with first element //3. Repeat starting from secong position onwards. int _min = 0; for (int i = 0; i < arr.Length; i++) { _min = i; for (int j

随机推荐