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

样式如下:

<style>
thead tr td{
    cursor: pointer;
}
thead tr td:hover{
    text-decoration: underline;
}
</style>

结构如下:

<table>
<thead>
<tr>
<td>姓名</td>
<td>性别</td>
<td id="score">成绩</td>
</tr>
</thead>
<tbody>
<tr>
<td>hoho</td>
<td>女</td>
<td>65</td>
</tr>
<tr>
<td>haha</td>
<td>男</td>
<td>73</td>
</tr>
<tr>
<td>hehe</td>
<td>女</td>
<td>67</td>
</tr>
</tbody>
</table>

js代码:

<script>
var score=document.getElementById('score');
var tbody=document.getElementsByTagName('tbody')[0];    //获取文档下的第一个tbdoy
var tr=tbody.getElementsByTagName('tr');     //获取tbody下的tr(数组)
var arr=[];
var isAsc=true;   //判断当前排序是否是正序
score.onclick=function(){
if(!isAsc){   //如果是反序,则进行一下操作 
for(var i=0;i<tr.length;i++){
arr.push(tr[i]);   //把tr数组复制到arr数组
}
arr.sort(function(tr1, tr2){    //数组排序arr.sort()
var value1 = tr1.getElementsByTagName('td')[2].innerHTML;
var value2 = tr2.getElementsByTagName('td')[2].innerHTML;
return value2.localeCompare(value1);   //localeCompare() 方法提供的是比较字符串的方法,如果value2>value1,则返回1;如果value2<value1,则返回-1;相等则0
});
Oinsert();   //进行文档添加操作
isAsc=true;  //点击之后反转一下顺序
} else {   //如果是正序,则进行一下操作
for(var i=0;i<tr.length;i++){
arr.push(tr[i]);
}
arr.sort(function(tr1, tr2){
var value1 = tr1.getElementsByTagName('td')[2].innerHTML;
var value2 = tr2.getElementsByTagName('td')[2].innerHTML;
return value1.localeCompare(value2);
});
Oinsert();
isAsc=false;
}
}

function Oinsert(){     //向文档添加已排好序的节点
var fragment=document.createDocumentFragment();   //当你想提取文档的一部分,改变,增加,或删除某些内容及插入到文档末尾可以使用createDocumentFragment() 方法
for(var j=0;j<arr.length;j++){
fragment.appendChild(arr[j]);   //把数组中的元素添加到节点的子节点列表的末尾
}
tbody.appendChild(fragment);   //把fragment添加到tbody
}
</script>

运行界面:

大家复制代码就可以看到效果啦!

js简单实现表格排序的更多相关文章

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

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

  2. JavaScript写一个表格排序类

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

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

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

  4. JS实现表格排序

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

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

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

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

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

  7. JS表格排序

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

  8. JS组件系列——表格组件神器:bootstrap table

    前言:之前一直在忙着各种什么效果,殊不知最基础的Bootstrap Table用法都没有涉及,罪过,罪过.今天补起来吧.上午博主由零开始自己从头到尾使用了一遍Bootstrap Table ,遇到不少 ...

  9. JS组件系列——表格组件神器:bootstrap table(三:终结篇,最后的干货福利)

    前言:前面介绍了两篇关于bootstrap table的基础用法,这章我们继续来看看它比较常用的一些功能,来个终结篇吧,毛爷爷告诉我们做事要有始有终~~bootstrap table这东西要想所有功能 ...

随机推荐

  1. 条目七《如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉》

    如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉 在STL中容器是智能的,可以在容器销毁时自动调用容器里对象的析构函数来销毁容器存储的对象. STL的容器虽然比较智能 ...

  2. Qt 学习之路 2(66):访问网络(2)

    Home / Qt 学习之路 2 / Qt 学习之路 2(66):访问网络(2) Qt 学习之路 2(66):访问网络(2)  豆子  2013年10月31日  Qt 学习之路 2  27条评论 上一 ...

  3. Flask之flask-script 指定端口

    简介 Flask-Scropt插件为在Flask里编写额外的脚本提供了支持.这包括运行一个开发服务器,一个定制的Python命令行,用于执行初始化数据库.定时任务和其他属于web应用之外的命令行任务的 ...

  4. [转] 前后端分离之JWT用户认证

    [From] http://www.jianshu.com/p/180a870a308a 在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当 ...

  5. 【总结】MYSQL注入

    关于MYSQL注入的总结,网上的资料很多,这里和大家简单分享下自己实战中常用的思路和命令 0x00   UNION联合查询型注入常用语句 order by n //定字段,n为正整数 union se ...

  6. 转 Monitoring Restore/Recovery Progress

    ora-279 是可以忽略的报错 In general, a restore should take approximately the same time as a backup, if not l ...

  7. Maven系统学习

    1. 1.1 何为构建? 编译.测试.运行.打包.部署等工作: Maven就是用软件的办法让这一系列工作自动化,只需要一条简单的命令,所有繁琐的工作就会自动完成: Maven最大的消除了构建的重复,抽 ...

  8. MVC JSON JavaScriptSerializer 进行序列化或反序列化时出错

    MVC control中返回json格式数据一般都是如下格式 [HttpPost] public ActionResult CaseAudit(string name) { var data =&qu ...

  9. 2019.03.27 读书笔记 关于GC垃圾回收

    在介绍GC前,有必要对.net中CLR管理内存区域做简要介绍: 1. 堆栈:用于分配值类型实例.堆栈主要操作系统管理,而不受垃圾收集器的控制,当值类型实例所在方法结束时,其存储单位自动释放.栈的执行效 ...

  10. Thinkphp基于规则的Auth权限认证类

      PS:onethink是基于该权限认证类实现,Auth类作为官方类库,在Library\Think里面. 其实Auth类也是基于角色访问控制RBAC扩展的,具体到节点的权限校验方式还是需要根据业务 ...