jQuery实现的表格前端排序功能示例


Posted in jQuery onSeptember 18, 2017

本文实例讲述了jQuery实现的表格前端排序功能。分享给大家供大家参考,具体如下:

表格前端按列排序

依赖jQuery(本例使用jQuery-1.8.2)

1.初始化方法

(function($){
  //插件
  $.extend($,{
    //命名空间
    sortTable:{
      sort:function(tableId,Idx){
        var table = document.getElementById(tableId);
        var tbody = table.tBodies[0];
        var tr = tbody.rows;
        var trValue = new Array();
        for (var i=0; i<tr.length; i++ ) {
          trValue[i] = tr[i]; //将表格中各行的信息存储在新建的数组中
        }
        if (tbody.sortCol == Idx) {
          trValue.reverse(); //如果该列已经进行排序过了,则直接对其反序排列
        } else {
          trValue.sort(function(tr1, tr2){
            var value1 = tr1.cells[Idx].innerText; //列
            var value2 = tr2.cells[Idx].innerText; //第二列
            value1 = value1.replace("%",""); //把有%的取消掉
            value1=value1.trim(); //去空格
            console.log(typeof(value1));
            if(isNaN(value1)){
              var index1 = value1.indexOf("分");
              var index2 = value2.indexOf("分");
              if(index1>0){
                var num1 =value1.substring(0,index1);
                var num2 =value1.substring(index1+1,value1.length-1);
                var num3 =value2.substring(0,index2);
                var num4 =value2.substring(index2+1,value2.length-1);
                if(parseFloat(num1)>parseFloat(num3)){
                  return 1;
                }
                if(parseFloat(num1)<parseFloat(num3)){
                  return -1;
                }
                if(parseFloat(num1)==parseFloat(num3)){
                  return parseFloat(num2)-parseFloat(num4)
                }
              }else{
                var a = tr1.cells[Idx].textContent;
                var b= tr2.cells[Idx].textContent;
                return a.localeCompare(b);
              }
            }else{
              return parseFloat(value1)-parseFloat(value2);
            }
          });
        }
        var fragment = document.createDocumentFragment(); //新建一个代码片段,用于保存排序后的结果
        //var index = 0;
        var arrtotal =new Array();
        for (var i=0; i<trValue.length; i++ ) {
          var c = trValue[i].cells[0].innerHTML;
          //console.log(c);
          if(c.trim().indexOf("汇总")!=-1){//汇总行总是排在表格最上面
          // index = i;
            arrtotal.push(i);
            }else{
          fragment.appendChild(trValue[i]);
         }
        }
        if(arrtotal.length>0){
          for(var k=arrtotal.length; k<0; k-- ){
             tbody.appendChild(trValue[arrtotal[k]]);
          }
        }
        //tbody.appendChild(trValue[index]);
        tbody.appendChild(fragment); //将排序的结果替换掉之前的值
        tbody.sortCol = Idx;
      }
    }
  });
})(jQuery);

2.页面函数

function desc_change(id,str){
   $("#desc_1").html("日期");
   $("#desc_2").html("ID");
   $("#desc_3").html("类别");
   $("#"+id).html(str);
}
function desc(id,str){
  var htmlstr =$("#"+id).text().trim();
  var c =str;
  if(htmlstr==str){
    c=str+'↓';
    $("#"+id).html(c);
  }else if(htmlstr==str+'↓'){
    c=str+'↑'
    $("#"+id).html(c);
  }else if(htmlstr==str+'↑'){
    c=str+'↓'
    $("#"+id).html(c);
  }
  desc_change(id,c)
}

3.DOM结构

<table id="tableSort">
    <thead>
    <tr>
        <th onclick="$.sortTable.sort('tableSort',0);desc('desc_1','日期')" ><a id="desc_1" >日期</a></th>
        <th onclick="$.sortTable.sort('tableSort',1);desc('desc_2','软件ID')" ><a id="desc_2" >ID</a></th>
      <th onclick="$.sortTable.sort('tableSort',2);desc('desc_x','渠道ID')" ><a id="desc_3" >类别</a></th>
    </tr>
    </thead>
    <tbody>
     <tr>
        <td>201870601</td>
        <td>汇总</td>
        <td>新闻</td>
     </tr>
    </tbody>
</table>

希望本文所述对大家jQuery程序设计有所帮助。

jQuery 相关文章推荐
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
Mar 23 jQuery
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
May 08 jQuery
jQuery实现radio第一次点击选中第二次点击取消功能
May 15 jQuery
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
Jul 05 jQuery
jQuery Layer弹出层传值到父页面的实现代码
Aug 17 jQuery
jQuery ajax读取本地json文件的实例
Oct 31 jQuery
jQuery基于Ajax实现读取XML数据功能示例
May 31 jQuery
jQuery实现基本淡入淡出效果的方法详解
Sep 05 jQuery
jQuery+PHP实现上传裁剪图片
Jun 29 jQuery
js/jQuery实现全选效果
Jun 17 jQuery
jQuery实现日历效果
Sep 11 jQuery
jQuery实现广告显示和隐藏动画
Jul 04 jQuery
jQuery实现对网页节点的增删改查功能示例
Sep 18 #jQuery
jQuery UI 实例讲解 - 日期选择器(Datepicker)
Sep 18 #jQuery
jQuery实现火车票买票城市选择切换功能
Sep 15 #jQuery
jQuery获取复选框选中的当前行的某个字段的值
Sep 15 #jQuery
jQuery plugin animsition使用小结
Sep 14 #jQuery
jquery 键盘事件的使用方法详解
Sep 13 #jQuery
React中jquery引用的实现方法
Sep 12 #jQuery
You might like
根据中文裁减字符串函数的php代码
2013/12/03 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
php生成图片缩略图功能示例
2017/02/22 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
jQuery实现简易QQ聊天框
2020/02/10 jQuery
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
2014/11/18 Python
Python实现过滤单个Android程序日志脚本分享
2015/01/16 Python
Python中基本的日期时间处理的学习教程
2015/10/16 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
Django框架封装外部函数示例
2019/05/28 Python
python3文件复制、延迟文件复制任务的实现方法
2019/09/02 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
学python最电脑配置有要求么
2020/07/05 Python
基于Python实现天天酷跑功能
2021/01/06 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
IGK Hair官网:喷雾、洗发水、护发素等
2020/11/03 全球购物
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
党员承诺书内容
2014/03/26 职场文书
高中生操行评语大全
2014/04/25 职场文书
宣传标语大全
2014/07/01 职场文书
应届生求职自荐信
2014/07/04 职场文书
店铺转让协议书
2015/01/29 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers