JS实现前台表格排序功能

虽然数据量不大的情况下,前台排序速度比较快,但一般情况下,我们的项目只使用后台排序,原因有二:

一是代码简单;二是前台JS排序对于有分页的情况无法处理。

前段时间,有个功能需要用到前台排序,没办法,写一个吧,下面记录一下实现的过程,其实很简单,如下:

var _sortType; //记录排序方向
 var _sortColumnIndex;//记录排序列位置
 var _sortMaxRow;//记录需要排序的行数
 
 /*
  *排序初始化
  */
 function initSort(obj){
  
  /*
   *计算需要排序的行数[此处取的是‘第一列不为空的行数’]
   *判断‘是否为空’时空格也要过滤掉
   */
  if(_sortMaxRow == null || _sortMaxRow == ''){
   var table1 = obj.parentNode.parentNode;
   var rows = table1.rows;
   for(var i = 1;i < rows.length;i++){
    var tv = rows[i].cells[0].innerText;
    if(tv != null && tv.replace(/(^\s*)(\s*$)/g,'') != ''){
     _sortMaxRow = i; 
    }
   }
  }
  
  /*
   *计算第几列需要排序
   */
  var sortColumnIndex = obj.cellIndex;
  
  /*
   *设置排序方向:
   *1、如果要排序列与上一次排序列位置相同,则将排序方向反转
   *2、如果要排序列与上一次排序列位置不相同,则排序方向不变,并设置需要排序的列位置
   */
  if(sortColumnIndex != _sortColumnIndex){
   _sortColumnIndex = sortColumnIndex;
   if(_sortType == null || _sortType == ''){
    _sortType = 'asc';
   }
  }
  else{
   if(_sortType == '' || _sortType == 'desc'){
    _sortType = 'asc';
   }
   else{
    _sortType = 'desc';
   }
  }
 }
 
 /*
  *执行排序
  */
 function execSort(obj){
  if(_sortColumnIndex == ''){
   sortField = 1;
  }
  if(_sortType == ''){
   sortType = 'asc';
  }
  
  /*
   *以下为排序部分
   *1、排序采用的是‘下沉法排序’[即,冒泡法的的逆方向]
   *2、由于涉及到隔行换色的问题,所以互换时只是把两行的内容互换,并没有将两个行对象互换
   */
  var table1 = obj.parentNode.parentNode; //通过TD获得TABLE
  for(var i = _sortMaxRow - 1;i >= 1;i--){
   for(j = 1;j <= i;j++){
    var t_first = table1.rows[j].cells[_sortColumnIndex].innerText;
    var t_second = table1.rows[j+1].cells[_sortColumnIndex].innerText;
    if((_sortType=='asc' && t_first > t_second) || (_sortType=='desc' && t_first < t_second)){
     swapRow(table1.rows[j],table1.rows[j+1]);
    }
   }
  }
 }
 
 function swapRow(row1,row2){
  for(var k = 0;k < row1.cells.length;k++){
   var tv = row1.cells[k].innerText;
   row1.cells[k].innerText = row2.cells[k].innerText;
   row2.cells[k].innerText = tv;
  }
 }

调用时,在表头TD上加 onclick="javascript:initSort(this);execSort(this);"

本文转载JS实现前台表格排序功能 - anywhere - 博客园 (cnblogs.com)

JS实现前台表格排序功能的更多相关文章

  1. js简单实现表格排序

    昨天看到一篇关于表格排序的随笔,鉴于本人还只会简单的js,不会使用封装,所以自己也试了一下写这个效果.可能不太优化,原理思路是:获取行对象tr,排序tr中要比较的对象td,排序后添加回tbody.如下 ...

  2. JS实现表格排序

    今天有点闲,写个小东西,使用JS实现点击表格标题栏实现自动排序功能,嘻嘻... 一.JS代码,文件名为code.js如下: (function($){ //插件 $.extend($,{ //命名空间 ...

  3. JS对表格排序(支持对序号,数字,字母,日期)

    JS对表格排序(支持对序号,数字,字母,日期) 前不久看到淘宝组件有"对表格排序的插件" 如想要看 可以看这个地址 http://gallery.kissyui.com/KSort ...

  4. 案例学习总结:原生JS实现表格排序

    最近在学习js的表格排序,没想到看不起眼的表格排序实际上却暗含了众多JS知识点.在这里记录一下此次学习过程.希望对大家也有所帮助. 完整的表格排序涉及了下列这些知识点: call方法使用 sort方法 ...

  5. js 实现table表格拖拽和点击表头升降序排序

    js 实现table表格拖拽和点击表头升降序排序,写的比较乱,用的时候可以把其中的一些模块函数提取出来 样式,由于是可拖拽表格,所以样式 table tr th{cursor:move;} js实现 ...

  6. [转载]EasyUI中数据表格DataGrid添加排序功能

    我们这里演示的是EasyUI数据表格DataGrid从服务器端排序功能,因为觉的本地数据排序没有多大的作用,一般我们DataGrid不会读取全部数据,只会读取当前页的数据,所以本地数据排序也只是对当前 ...

  7. JQuery Easyui/TopJUI 用JS创建数据表格并实现增删改查功能

    JQuery Easyui/TopJUI 用JS创建数据表格并实现增删改查功能 html <table id="productDg"></table> &l ...

  8. 前端 vue/react 或者 js 导入/导出 xlsx/xls (带样式)表格的功能

    第一种导出表格的功能: yarn add xlsx script-loader file-saver xlsx-style 效果展示 xlsx-style的bug修复:node_module/xlsx ...

  9. JS表格排序

    var employees = [] employees[0] = { name: "George", age: 32, retiredate: "March 12, 2 ...

随机推荐

  1. day8.函数基础

    一.函数介绍 1.什么是函数     函数就是盛放代码的容器,把实现某一功能的一组代码丢到一个函数中     就做成了一个小工具       具备某一功能的工具->函数     事先准备工具的过 ...

  2. Day12 _63_获取当前线程对象

    给线程起名 * 1. Thread.currentThread(); 可以获取到当前线程对象,出现在哪就是获取哪个线程. * 2. thread.setName(); 给该线程起名字 * 3. thr ...

  3. 1.7.9- HTML合并单元格实例

  4. SpringCloud之服务网关Gateway,入门+实操

    SpringCloudAlibaba微服务实战教程系列 Spring Cloud 微服务架构学习记录与示例 一. GateWay简介 Spring Cloud GateWay是Spring Cloud ...

  5. 病毒木马查杀实战第021篇:Ring3层主动防御之编程实现

    前言 我们这次会依据上次的内容,编程实现一个Ring3层的简单的主动防御软件.整个程序使用MFC实现,程序开始监控时,会将DLL程序注入到explorer.exe进程中,这样每当有新的进程创建,程序首 ...

  6. ubuntu 14.04.5 编译Android 4.4.4 r1源码(最新)

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/54426189 吐槽:ubuntu系统真是让人又爱又恨,也有可能是VMware Wo ...

  7. POJ2406简单KMP

    题意:      给一个字符串,求最大的前缀循环周期,就是最小的循环节对应的最大的那个周期. 思路:      KMP的简单应用,求完next数组后有这样的应用:next[i] :是最大循环节的第几位 ...

  8. CVE-2013-1347:Microsoft IE CGenericElement UAF 漏洞利用样本分析

    CVE-2013-1347 漏洞是典型的 IE 浏览器 UAF 漏洞,所以其利用方法和一般的 IE 浏览器漏洞的利用方法非常相似,所以流程大体上可以分为这些步骤:(1) 对象被释放 (2) 精确覆盖被 ...

  9. Cmder右键配置

    Cmder右键配置 每次用camder手动一层一层的进入目标文件夹,是一件很麻烦的事儿.所以,将camder添加到系统右键菜单是个很好地解决方法. 1.把 Cmder 加到环境变量 把Cmder.ex ...

  10. 制作 PPT 的新方式出现了——GitHub 热点速览 v.21.19

    作者:HelloGitHub-小鱼干 想当初 Markdown 的出现,拯救了多少死在 Word 样式调整上的人,现在,slidev 出现了,它让你 Focus 在本该专注的 PPT 内容制作上而不需 ...