JavaScript-点击表格的表头进行排序
HTML如下:
<table class="heroinfo">
<thead title="点击排序">
<tr>
<th>英雄</th><th>力量</th><th>敏捷</th><th>智力</th><th>移速</th>
</tr>
</thead>
<tbody>
<tr>
<td>英雄1</td><td>28</td><td>32</td><td>20</td><td>300</td>
</tr>
<tr>
<td>英雄2</td><td>29</td><td>22</td><td>30</td><td>320</td>
</tr>
<tr>
<td>英雄3</td><td>25</td><td>30</td><td>25</td><td>310</td>
</tr>
<tr>
<td>英雄4</td><td>33</td><td>28</td><td>22</td><td>305</td>
</tr>
<tr>
<td>英雄5</td><td>27</td><td>36</td><td>20</td><td>330</td>
</tr>
</tbody>
</table>
效果如下:

一、原生JS实现:来自JS权威指南,比书上多了再次点击后逆序排列的功能
//查找表格的<th>元素,让它们可单击
function makeSortable(table) {
var headers=table.getElementsByTagName("th");
for(var i=0;i<headers.length;i++){
(function(n){
var flag=false;
headers[n].onclick=function(){
// sortrows(table,n);
var tbody=table.tBodies[0];//第一个<tbody>
var rows=tbody.getElementsByTagName("tr");//tbody中的所有行
rows=Array.prototype.slice.call(rows,0);//真实数组中的快照 //基于第n个<td>元素的值对行排序
rows.sort(function(row1,row2){
var cell1=row1.getElementsByTagName("td")[n];//获得第n个单元格
var cell2=row2.getElementsByTagName("td")[n];
var val1=cell1.textContent||cell1.innerText;//获得文本内容
var val2=cell2.textContent||cell2.innerText; if(val1<val2){
return -1;
}else if(val1>val2){
return 1;
}else{
return 0;
}
});
if(flag){
rows.reverse();
}
//在tbody中按它们的顺序把行添加到最后
//这将自动把它们从当前位置移走,故没必要预先删除它们
//如果<tbody>还包含了除了<tr>的任何其他元素,这些节点将会悬浮到顶部位置
for(var i=0;i<rows.length;i++){
tbody.appendChild(rows[i]);
} flag=!flag;
}
}(i));
}
} window.onload=function(){
var table=document.getElementsByTagName("table")[0];
makeSortable(table);
}
二、编写jQuery插件实现
;(function($){
$.fn.extend({
"makeSortable":function(){
var table=$(this),
headers=table.find('th');
for(var i=0,len=headers.length;i<len;i++){
(function(n){
var flag=false;
headers.eq(n).click(function() {
var tbody=table.children('tbody').eq(0);
var rows=tbody.children('tr');
rows=Array.prototype.slice.call(rows,0);
rows.sort(function(row1,row2){
var val1=$(row1).children('td').eq(n).text();
var val2=$(row2).children('td').eq(n).text();
if(val1>val2){
return 1;
}else if(val1<val2){
return -1;
}else{
return 0;
}
});
if(flag){
rows.reverse();
}
tbody.append(rows);
flag=!flag;
});
}(i));
}
return this;
}
});
})(jQuery);
$(function(){
$(".heroinfo").makeSortable();
});
两种方法均能实现点击一次实现从小到大排序,再次点击从大到小排序。
JavaScript-点击表格的表头进行排序的更多相关文章
- QT中Qtableview视图表格中点击表头进行排序
用QT写了一个小工具,主要是对Excel中大量的数据进行计算和显示. 写了有一段时间,然后断断续续的做一些修改和完善. 因为要显示的数据有多列,很自然的会想到要能够对显示的数据进行排序.如果直接操作m ...
- Jtable 表格按多列排序(支持中文汉字排序)
这两天公司让做一个Jtable表格的排序,首先按A列排序,在A列相等时按B列排序,B列相等时按C列排序,ABC三列可以任意指定,最多分三列,这样的一个需求.由于我是大神,所以必须做了出来.ok,不自恋 ...
- AngularJS table 按照表头字段排序功能(升序和降序)
一.表格按照表头排序 <!doctype html> <html ng-app="a3_4"> <head> <title>表头排序 ...
- HTML & CSS & JavaScript 从一个表格到一个灰阶颜色表 03
工具1:HBuilder X 1.9.9.20190522 工具2:火狐浏览器 67.0.4 (64 位) 其实,我还想使用表格,做一个这样的颜色表,如下图所示: 如果按照之前的做法,把每一种颜色都列 ...
- 点击表格的单元格时实现变颜色,通过for循环为每个单元格添加一个onclick事件
<title>无标题文档</title> <script type="text/javascript" language="javascri ...
- easyUI表格多表头实现
项目中要实现表格多表头,结合网上的例子自己实现了一个,包含frozenColumns情况. 一,通过标签创建 效果: <table id="schoolGrid" class ...
- javascript生成表格增删改查 JavaScript动态改变表格单元格内容 动态生成表格 JS获取表格任意单元格 javascript如何动态删除表格某一行
jsp页面表格布局Html代码 <body onload="show()"> <center> <input type="text" ...
- JavaScript:固定table的表头
当表格数据很多,以致于容器块元素出现滚动条.而在滚动滚动条的时候,数据行会被块元素遮挡.若要保持表格的head部分始终在可视范围内,我们需要对表头进行特殊的样式设置.下面的jsp代码可以实现表头固定, ...
- HTML & CSS & JavaScript 从一个表格到一个灰阶颜色表 01
工具1:HBuilder X 1.9.9.20190522 工具2:火狐浏览器 67.0.4 (64 位) 在开始之前,你需要了解一些基本的知识,不要求你能掌握,但是了解一下还是有益的: HTML 简 ...
随机推荐
- [Python] 模拟登录网站(。。为了之后操作数据。。)
我司的内部管理(Web)系统(日报)着实..(mafan).. 所以,就想自己动手增加一下便利性. 计划是, - 桌面程序 用来方便记录(按自己格式,数据随时保存到sqlite中,备用) 通过一览来确 ...
- CSS初窥
- rolling方式修改oplog
在 3.4之前版本 , 修改oplog 是一个非常麻烦的事情, 要停数据库 , rolling方式适合 3.4 之前版本修改oplog的大小 1. 配置文件注释 replSet2. 配置文件 oplo ...
- 【xsy2748】 fly 矩阵快速幂
题目大意:有$n$个点,$m$条有向边,其中第$i$条边需要在$t_i$秒后才出现在图上. 有一个人刚开始呆在$1$号节点,每秒钟他必须要选择一条从他所在位置走出去的边,走出去(如果没有的话这人就死了 ...
- 转MVC3介绍
第一节:Asp.Net MVC3项目介绍 让我们先看一下,一个普通的Asp.Net MVC3项目的样例,如下图所示 跟WebFrom还是有区别的,如果你已经了解Asp.Net MVC2的话,那就感觉异 ...
- Centos7下安装zabbix 3.0.19
参考网站: https://www.cnblogs.com/xiewenming/p/7732144.html https://www.cnblogs.com/clsn/p/7885990.html ...
- Netty核心概念(8)之Netty线程模型
1.前言 第7节初步学习了一下Java原本的线程池是如何工作的,以及Future的为什么能够达到其效果,这些知识对于理解本章有很大的帮助,不了解的可以先看上一节. Netty为什么会高效?回答就是良好 ...
- 【数组】Container With Most Water
题目: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, a ...
- 数字和表达式(python)
>>>2+2 4 >>>1/2#(注:3.0版本之前是这样的,整数除法) >>>1.0/2.0 0.5 >>>1.0/2 0.5 ...
- Chapter 3 Phenomenon——14
They wheeled me away then, to X-ray my head. 他们把我移到了一边用X光照射我的头. 他们把我放到轮椅上,推着我去做头部X光检查. I told them t ...