项目开发中需要对表格数据点击表头进行排序,于是采用了开源的sorttable.js 这是一款非常不错的排序工具,集合了许多前辈们的智慧在里面。
一、将sorttable.js引入进来后遇到这样几个问题:
1.sorttable.js只能处理单行表头的排序,而我们的报表大多数是两行表头,直接引入无法进行排序;
2.我们的报表已经有了奇偶行换色的功能,引入sorttable.js后该功能遭到破坏,数据行重新排列,奇偶行颜色混乱;
3.我们的多数报表底部行为总计行,不排序。虽然sorttable.js已经提供了<tfoot>不参与排序功能,但是我们的报表数据都是以集合遍历的形式输出到页面,无<tfoot>。
二、解决办法
1.翻阅源码53行
if (table.tHead.rows.length != 1) return; // can't cope with two header rows
当表头为多行时函数return了。
又78行
headrow = table.tHead.rows[0].cells;
取表头第一行为点击排序行。
在这里我把函数改成取表头最后一行为点击排序行
//表头有多行时以最后一行为为点击排序行
headrow = table.tHead.rows[table.tHead.rows.length - 1].cells;
同时删除53行。
2.报表本身的奇偶行换色是通过在报表页面使用jquery为奇数行添加CSS类实现效果
$(function(){
$(".pn-ltbody tr:nth-child(odd)").addClass("altrow");
});
所以我的解决的思路是在用户点击表头后、表格排序前把奇数行的CSS类移除,表格排序完成后再给新的奇数行添加CSS类,具体实现如下:
在源码93行(点击表头事件)
dean_addEvent(headrow[i],"click", function(e) {
之后添加语句
$(".pn-ltbody tr:nth-child(odd)").removeClass("altrow");
并在105行和118行(表格排序完成)
return;
之前添加语句
$(".pn-ltbody tr:nth-child(odd)").addClass("altrow");
3.源码从59行开始提供了表格最后一行固定不进行排序的实现,但是这个实现的前提是要给最后一行手动添加一个CSS类"sortbottom"。
然而我们的报表数据从第一行到最后一行都是通过遍历后台传过来的集合动态生成的,因此我的解决办法就是动态的将最后一行标记为不排序行。
//table的class包含"nofoot"的, 最后一行是总计行,不进行排序。适用于整个表体都是动态循环遍历生成的情况。
if (table.className.search(/\bnofoot\b/) != -1) {
if(table.getElementsByTagName('tfoot').length == 0){
//自己创建<tfoot>把最后一行封装进去
/*
tfo = document.createElement('tfoot');
tfo.appendChild(table.rows[table.rows.length - 1]);
table.insertBefore(tfo,table.lastChild);
*/
//给最后一行添上CSS类,转到自带的封装方式
table.rows[table.rows.length - 1].className='sortbottom';
}
}
一种方法是自己创建<tfoot>把最后一行封装进去,另一种方法是给最后一行添上CSS类,转到自带的封装方式。
分享到:
相关推荐
1. **SortTable.js**:这是一个JavaScript库,用于实现表格数据的动态排序功能。用户可以通过点击表头对表格中的数据进行升序或降序排序。SortTable.js 可能包含了对表格元素的事件监听、数据解析和排序算法的实现。...
"SortTable.js"这个文件就是为了实现这一功能而设计的,它提供了一种客户端的解决方案,避免了每次排序都需要向服务器发送请求的延迟。 "Table排序"主要是指对HTML `<table>`元素中的数据行依据某一列或多列进行...
在JavaScript编程中,实现“js表格点击表头排序”是一个常见的功能需求,特别是在网页数据展示时,用户往往希望可以通过点击表头快速对数据进行升序或降序排列。本知识点将详细讲解如何在纯前端环境下,利用...
这个“纯js实现点击表头排序”的功能,就是一种轻量级的JavaScript解决方案,它不依赖任何外部库,如jQuery或类似的框架,从而减少了页面加载的时间,提高了性能。 首先,我们需要了解JavaScript中的数组方法,如`...
"tablesort.js"是一个轻量级的JavaScript类,它允许用户通过简单的操作实现表格数据的动态排序,无需重新查询数据库,极大地提高了用户体验。下面我们将深入探讨tablesort.js的工作原理、使用方法以及其在实际项目中...
sorttable.js 是一个常用的JavaScript库,用于实现表格排序功能。它通过添加额外的类名和事件处理来扩展HTML的`<table>`元素。当用户点击带有特定标识的表头时,sorttable.js库会解析表格数据,对其进行排序,然后...
这个功能强大的JavaScript库,被称为"sorttable",能够帮助开发者轻松实现表格数据的排序,同时提供了自定义排序规则的能力,大大增强了用户体验。 首先,我们要理解sorttable的核心概念。在JavaScript中,排序通常...
最后,这个例子只处理了纯文本的排序,如果表格中包含数字或其他需要特殊处理的数据类型,你可能需要扩展这个函数以适应不同情况。例如,对于日期或数字,你可能需要将`innerHTML`转换为数字进行比较,而不是直接...
SortTable是一个轻量级的JavaScript库,专门用于实现表格的排序功能。 SortTable版本2于2007年4月7日发布,其设计思路是简单易用,只需在HTML中引入`<script src="sorttable.js"></script>`,然后将需要排序的表格...
在JavaScript中,对HTML表格(`<table>`)进行排序是一项常见的需求,特别是在动态数据展示和用户...在实际项目中,还可以进一步扩展,例如,添加动画效果,处理排序时的用户反馈,以及处理空值和非数字类型的排序等。
### JS 实现表格排序(点击表头)详细解析 #### 概述 本文将详细介绍一个JavaScript脚本,该脚本可以实现对HTML表格进行排序的功能。用户只需通过点击表格的表头来触发排序操作,非常方便快捷。此脚本文档化程度高...
■ 设置表头,即给触发该列排序的td一个class名字 ■ 创建对象,即初试化tableSort这个类. ■ 使用默认的排序触发方式 如果初始化? var apply = new tableSort("bodys","tag"); apply.toTagStart();//...
在网页开发中,数据展示通常会使用到HTML的表格元素`<table>`,而当用户需要根据某一列的数据进行升序或降序排序时,JavaScript(js)就扮演了关键角色。本文将深入探讨如何利用JavaScript实现对HTML表格的数据排序...
在默认情况下,表头点击排序仅仅基于文本内容进行,如果单元格中有链接或其他HTML内容,可能会导致排序出现问题。同样的,如果某个单元格为空,可能会在排序时被排到列表的开始或结束,这并不是我们想要的结果。 ...
JavaScript表格排序是一个常见的需求,特别是在网页中展示数据时。它允许用户通过点击表头来对数据进行升序或降序排列。在这个实例中,我们将深入探讨JavaScript如何实现表格的动态排序。 首先,我们需要理解HTML...
以下是一个简单的基于字符串的升序排序示例: ```javascript function sortTable(e) { var th = e.target; var colIndex = Array.prototype.indexOf.call(th.parentNode.children, th); var rows = Array.from...
这里,我们为每个表头添加了一个点击事件监听器`onclick`,并调用了名为`sortTable`的JavaScript函数,该函数接收一个参数,表示要排序的列索引。 接下来是CSS样式部分,用于显示和隐藏箭头: ```css .sortArrow {...
接下来,我们关注`sortTable.js`文件,这是实现排序功能的核心。这个脚本定义了`sortTable`函数,它根据传入的列索引对表格数据进行排序: ```javascript function sortTable(n) { var table, rows, switching, i,...