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

前不久看到淘宝组件有"对表格排序的插件" 如想要看 可以看这个地址 http://gallery.kissyui.com/KSortTable/1.0/demo/index.html 但是看了下他们的JS源码 有点复杂 所以自己试着写了一个简单点的,同样也能实现相应的功能,且相对于他们来讲 多添加了一个"按日期排序的功能" , 目前对日期的格式 支持两种格式:一种是2013/12/29 另外一种是:2013-12-29 。其他的日期未做处理,其实对表格排序 特别对字母排序刚开始有点纠结,看了下kissy组件源码 感觉他们那样处理有点复杂 所以自己也是google下 发下JS有一种方法可以比较本地的字母的方法 ----- localeCompare。

什么是localeCompare?

根据官方定义: 确定两个字符串在当前区域设置中是否相等。(当然字母可以转换成字符串进行比较)。

语法如下:

stringVar.localeCompare(stringExp[, locales][, options]) 。

stringVar

必需。 要比较的第一个字符串。 这可能是 String 对象或字符串文本。

stringExp

必需。 要比较的第二个字符串。

locales

可选。 包含一种或多种语言或区域设置标记的区域设置字符串数组。 如果包含多个区域设置字符串,请以降序优先级对它们进行排列,确保首个条目为首选区域位置。 如果省略此参数,则使用 JavaScript 运行时的默认区域设置。

options

可选。 包含指定比较选项的一个或多个特性的对象。

下面可以先来看看效果吧!

表格排序的原理?

还是用上一篇文章的方法 用图来解释 更明白点 如下:

思路如上面所示:

HTML代码 css代码 我是直接把淘宝的结构和css样式拿过来用的 其实HTML+CSS对于前端或者后端来说 没有什么 只是以什么样的显示而已 没有其他什么的  至于JS的逻辑 就是上面的图表解释的那个逻辑。我会在下面提供demo源码 大家可以下载下看看。

所以在这里 也不贴HTML代码和CSS代码了 直接贴下JS代码 不过会提供Demo源码下载 有兴趣的同学可以看看!

JS代码如下:

/**
* JS对表格排序(支持按序号,日期,字母,数字排序)。
* @constructor {KSortTable}
* @date 2013-12-26
* @author tugenhua
* @email 879083421@qq.com
*/ function KSortTable(options) { this.config = {
tableElem : '.J_table', //表格容器
sortableElem : '.sortable', // 点击对象
callback : null // 排序好后的回调函数
}; this.cache = {
trArrs : [] // 存放tbody下的所有tr
}; this.init(options);
} KSortTable.prototype = {
constructor : KSortTable,
init: function(options){
this.config = $.extend(this.config,options || {});
var self = this,
_config = self.config,
_cache = self.cache; $(_config.sortableElem).each(function(index,item){ $(item).unbind('click');
$(item).bind('click',function(e){
var tagParent = $(this).closest(_config.tableElem),
tagAttr = $(this).attr("data-sorttable"); // 判断table元素是否有属性 data-sorttable = 'true' 没有的话 不做任何事情
if($(tagParent).attr('data-sorttable') == 'true') {
self._curStyle($(this));
var index = $(_config.sortableElem,tagParent).index($(this)); // 排序函数
self._sortMethod(index,tagAttr,tagParent,$(this));
}
});
});
},
/*
* 点击对当前添加样式
*/
_curStyle: function(item) {
var self = this;
!$(item).hasClass('st-active') && $(item).addClass("st-active").siblings().removeClass("st-active");
if(!$(item).hasClass('data-reverse')) {
$(item).addClass('data-reverse');
}else {
$(item).removeClass('data-reverse');
}
},
/*
* 排序方法 做了type的判断
* 目前暂支持 数字 字符串 日期的比较
*/
_sortMethod: function(index,tagAttr,tagParent,tagElem) {
var self = this,
_config = self.config,
_cache = self.cache; var tbody = $(tagParent)[0].tBodies[0];
for(var i = 0, ilen = tbody.rows.length; i < ilen; i++) {
_cache.trArrs[i] = tbody.rows[i];
}
if(tagAttr == 'number') {
_cache.trArrs.sort(function (td1, td2){
if($(tagElem).hasClass('data-reverse')) {
return td1.cells[index].innerHTML - td2.cells[index].innerHTML;
}else {
return td2.cells[index].innerHTML - td1.cells[index].innerHTML
}
});
}else if(tagAttr == 'string') {
_cache.trArrs.sort(function(td1,td2){
var str1 = td1.cells[index].innerHTML,
str2 = td2.cells[index].innerHTML; if($(tagElem).hasClass('data-reverse')) {
return str1.localeCompare(str2);
}else {
return str2.localeCompare(str1);
}
});
}else if(tagAttr == 'date') {
_cache.trArrs.sort(function (td1, td2){
var str1 = td1.cells[index].innerHTML,
str2 = td2.cells[index].innerHTML; if($(tagElem).hasClass('data-reverse')) {
return Date.parse(str1.replace(/-/g,'/')) - Date.parse(str2.replace(/-/g,'/'));
}else {
return Date.parse(str2.replace(/-/g,'/')) - Date.parse(str1.replace(/-/g,'/'));
}
});
} //把排序后的tr 重新插入tbody
for(var j =0; j < _cache.trArrs.length; j++ ) {
tbody.appendChild(_cache.trArrs[j]);
}
// 排序完 回调
_config.callback && $.isFunction(_config.callback) && _config.callback();
}
}; /* JS初始化 */
$(function(){
new KSortTable({});
});

Demo下载

JS对表格排序(支持对序号,数字,字母,日期)的更多相关文章

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

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

  2. JS实现表格排序

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

  3. 用原生js对表格排序

    阿里的模拟笔试题,当时时间有限没写出来,其实是因为自己对原生dom操作不熟悉,这里补一下. 题目的大意是有一个表格,如代码所示 <table> <tr> <th>N ...

  4. css3 -- 自动生成序号(不使用JS,可任意排序)

    需求:一个table 需要在第一列生成序号:1.2.3.4.5......  并且自适应行数 不使用后台程序,开始考虑使用JS,但是一旦前台排序后,序号就乱了,最后采用CSS的一个计数器方法实现! & ...

  5. js简单实现表格排序

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

  6. JS实现前台表格排序功能

    JS实现前台表格排序功能 虽然数据量不大的情况下,前台排序速度比较快,但一般情况下,我们的项目只使用后台排序,原因有二: 一是代码简单:二是前台JS排序对于有分页的情况无法处理. 前段时间,有个功能需 ...

  7. JS表格排序

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

  8. JavaScript写一个表格排序类

    依稀记得那是上个星期六的下午,我参加了网易暑期实习生招聘笔试.考得相当糟糕,编程题3个题通过了2个,简答题没做对,选择题貌似是20个题猜了6-7个,99%是挂了,唉唉唉!生活不只眼前的苟且,学习的脚步 ...

  9. 基于Metronic的Bootstrap开发框架经验总结(18)-- 在代码生成工具Database2Sharp中集成对Bootstrap-table插件的分页及排序支持

    在我们开发系统界面,包括Web和Winform的都一样,主要的界面就是列表展示主界面,编辑查看界面,以及一些辅助性的如导入界面,选择界面等,其中列表展示主界面是综合性的数据展示界面,一般往往需要对记录 ...

随机推荐

  1. Linux常用基本命令[find]用法(1)

    find是个很强大的命令,用法很多. 作用:查找目录下的文件,同时也可以调用其他命令执行相应的操作 用法: find [选项] [路径][操作语句] find [-H] [-L] [-P] [-D d ...

  2. Code Signal_练习题_firstDigit

    Find the leftmost digit that occurs in a given string. Example For inputString = "var_1__Int&qu ...

  3. 百度智能小程序弹窗组件wcPop|智能小程序自定义model弹窗模板

    百度智能小程序自定义弹窗组件wcPop|百度小程序model对话框|智能小程序弹窗界面模板 最近百度也推出了自己的智能小程序,如是就赶紧去试了下,官方提供的api还不是狠完整.而且官方提供的弹窗组件也 ...

  4. Visual Studio 2012 Update 1 离线升级包(相当于VS2012 SP1离线补丁包)

    Visual Studio 2012 Update 1 发布也有一段时间了,吾乐吧尝试了好几次在线升级,但是网络不给力啊,结果都失败了.于是一直都想找到官方提供的VS2012 SP1完整离线升级包,不 ...

  5. Appium环境搭建(MAC版)

    一.环境搭建 (1)安装node.js brew install node (2)安装Xcode 测试iOS App需要.打开Finder,在Applications文件夹下,看是否有Xcode.ap ...

  6. 《细说PHP》第二版--读书笔记

    第五章 PHP的基本语法 5.2.4 在程序中使用空白的处理 5.3 变量 5.3.1 变量的声明 在php中变量的声明必须是使用一个$符号,后面跟变量名来表示 unset()函数释放指定变量 iss ...

  7. windows环境下 nginx+iis 反向代理解决跨域问题

    项目基本完成,是时候花点时间整理一下最近的姿势了 1 什么是跨域? 网上对于跨域的概念会有大篇幅的文章去解释,似乎有点玄乎,初学者很容易对这个概念产生恐惧,跨域其实很简单,其实只要知道一点,无法跨域访 ...

  8. MySQL 8.0有什么新功能

    https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/ 我们自豪地宣布MySQL 8.0的一般可用性. 现在下载 ...

  9. python 函数闭包()

    闭包(closure) 当一个函数在内部定义函数,并且内部的函数应用外部函数的参数或者局部变量,当内部函数被当做返回值的时候,相关参数和变量保存在返回函数中,这种结果,叫闭包 example1: de ...

  10. 调用webservice 的时候没法输入参数

    在web.config的<system.web></system.web>中间加入如下配置节内容<webServices> <protocols> &l ...