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 简 ...
随机推荐
- 频繁项集挖掘之Aprior和FPGrowth算法
频繁项集挖掘的应用多出现于购物篮分析,现介绍两种频繁项集的挖掘算法Aprior和FPGrowth,用以发现购物篮中出现频率较高的购物组合. 基础知识 项:“属性-值”对.比如啤酒2罐. 项集:项的集 ...
- (原创)确保JAVA线程安全的4种常用方法
在Java中可以有很多方法来保证线程安全,比如使用同步方法.同步块,使用原子类(atomic concurrent classes),实现并发锁,使用volatile关键字,使用不变类和线程安全类. ...
- 怎样优化调整innodb_log_buffer_size
官方文档并没有直接告诉如何调整 innodb_log_buffer_size 大小, 根据对mysql 的状态信息了解知道 innodb_log_buffer_size 跟 Innodb_os_lo ...
- 【bzoj4259】 残缺的字符串 FFT
又是一道FFT套路题 思路可以参考bzoj4503,题解 我们对串S和串T中出现的*处全部赋值为0. 反正最终的差异度式子大概就是 $C[i]=\sum_{j=0}^{|T|-1}S[i+j]T[j] ...
- vue微信分享链接添加动态参数
微信分享时 分享链接携带参数可能不是固定的 需要在分享的前一刻才知道 这里就是动态设置分享链接的基本写法 代码不是那么详尽 但大致流程如下 1.安装引用jssdk npm install --save ...
- js05
继续学习js,在这里我们主要讲述一下js的BOM(浏览器对象模型)以及一些js库和应用这些js库的方法. 1.浏览器对象模型(BOM): window对象: 表示浏览器窗口,所有的 ...
- vue-Treeselect 使用备注
<head> <!-- include Vue 2.x --> <script src="https://cdn.jsdelivr.net/npm/vue@@^ ...
- Java之集合(二十七)其它集合
转载请注明源出处:http://www.cnblogs.com/lighten/p/7551368.html 1.前言 本章介绍剩余的3个集合类:ConcurrentSkipListSet.CopyO ...
- 【链表】 Reverse Linked List II
题目: Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1- ...
- JDK自带工具介绍
JDK工具一览表 工具名称 功能描述 appletviewer.exe 用于运行并浏览applet小程序. apt.exe 注解处理工具(Annotation Processing Tool),主要用 ...