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 相关文章推荐
HTML5+jQuery实现搜索智能匹配功能
Mar 24 jQuery
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
Mar 25 jQuery
jQuery取得元素标签名称小结(附代码)
Aug 16 jQuery
React中jquery引用的实现方法
Sep 12 jQuery
jQuery中可见性过滤器简单用法示例
Mar 31 jQuery
通过jquery toggleClass()属性制作文章段落更改背景颜色
May 21 jQuery
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
Jul 31 jQuery
jQuery解析json格式数据示例
Sep 01 jQuery
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
Jun 18 jQuery
JavaScript实现的滚动公告特效【基于jQuery】
Jul 10 jQuery
jQuery实现每日秒杀商品倒计时功能
Sep 06 jQuery
jQuery HTML css()方法与css类实例详解
May 20 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操作数组的一些函数整理介绍
2011/07/17 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
jQuery实现的可编辑表格完整实例
2016/06/20 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
Vue.js实现一个todo-list的上移下移删除功能
2017/06/26 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
微信小程序实现图片放大预览功能
2020/10/22 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
Python中set与frozenset方法和区别详解
2016/05/23 Python
python:socket传输大文件示例
2017/01/18 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
python 定时器,实现每天凌晨3点执行的方法
2019/02/20 Python
解决python 读取 log日志的编码问题
2019/12/24 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
什么是GWT的Entry Point
2013/08/16 面试题
十岁生日同学答谢词
2014/01/19 职场文书
给老师的检讨书
2014/02/11 职场文书
男人帮观后感
2015/06/18 职场文书
董事长致辞
2015/07/29 职场文书
asyncio异步编程之Task对象详解
2022/03/13 Python
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL