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. GoTTY-K8S-Docker 终端

    安装GoTTY 下载yum源 curl -s https://mirror.go-repo.io/centos/go-repo.repo | tee /etc/yum.repos.d/go-repo. ...

  2. Day13_68_中止线程

    中止线程方法一 * 在线程类中定义一个bollean类型的变量,默认值设置为ture,如果想要中断线程,只需要将该boolean类型的变量设置为false就可以了 * 代码 package com.s ...

  3. 【cypress】5. 测试本地web应用

    在之前的cypress介绍里曾提到过,cypress虽然也可以测试部署好的应用,但是它最大的能力还是发挥在测试本地应用上. 本章主要内容就是关于如何测试本地web应用的概述: cypress与后台应用 ...

  4. 逆向工程第001篇:解锁FIFA07传奇模式

    FIFA07传奇难度的解锁,可以说是所有FIFA07玩家的终极目标.但是如果想以正常方式对其进行解锁,绝对是一件耗时耗力的工作.所以在这里我打算通过分析游戏存档文件的十六进制代码的方式,一步一步地找到 ...

  5. 逆向工程第003篇:跨越CM4验证机制的鸿沟(上)

    一.前言 <冠军足球经理>系列作为一款拟真度极高的足球经营类游戏,赢得过无数赞誉,而CM4可以说是这个传奇的起点.但是在游戏安装过程中,当用户输入完序列号之后,程序并不会对用户的输入进行真 ...

  6. POJ2536 二分图匹配

    题意:      有n只老鼠,m个洞,每个洞最多可以藏一只老鼠,每个老鼠的移动速度都是v,给你他们的当前坐标,和洞的坐标,突然老鹰来了,他们必须在s秒内跑到一个洞藏起来,问你最少有多少只老鼠被抓走了. ...

  7. hdu4994 博弈,按顺序拿球

    题意:       给你n堆东西,两个人博弈的去拿,每次最少一个,最多是一堆,必须按顺序那,也就是只有把第一堆的东西拿完了才能去拿第二堆东西,谁先拿完谁胜,问新手是否能胜利. 思路:       显然 ...

  8. 数据库的读写分离(Amoeba)

    目录 Amoeba Amoeba读写分离的配置 Amoeba Amoeba(变形虫) 项目,该开源框架于2008年开始发布一款 Amoeba for Mysql软件. 这个软件基于Java致力于MyS ...

  9. 初学Golang的笔记

    Note 一个module是一个go package的集合,该module用于发布的一个单位. 一般一个go repo仅仅包含一个module,含有一个go.mod文件 每个module路径不仅仅用于 ...

  10. BUAA软件工程热身作业

    写在前面 项目 内容 所属课程 2020春季计算机学院软件工程(罗杰 任健) (北航) 作业要求 热身作业(阅读) 课程目标 培养软件开发能力 本作业对实现目标的具体作用 深入认识自己,总结过往并展望 ...