`
abruzzi
  • 浏览: 449336 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

对Table进行排序 (可指定排序方式)

阅读更多

在日常的WEB开发中,对表格的排序经常会用到,于是在网上找了些资料,然后自己下来研究了下,做了一些整理,现在将他贴出来,一来备忘,二来可以帮助其他需要的人。

 

需要注意的地方:
关于table中按行按列排序的方法:
1. 取出每一行作为排序的单元,结果即为完整的正确的排序。
2. 每一行中有一个关键字用于排序的标准
2.1 每一个关键字都有类型的区别,如string, int, date, float等类型
3. IE和Firefox中,元素中内容的存储形式有一定的区别
4. 数组有已有的排序接口,[无参数形式和有参数形式]
4.1 无参数形式的排序,按第一个字母的顺序进行,第一个字母相同者比较
第二个字母,以此类推
4.2 有参数形式的排序,通过实现一个排序函数,每次取出两个tr进行排序
5. 如果连续点击同一个th,则表示要对当前的列进行升序和降序操作。
6. 列中的数据类型不同,则排序方式有所差别,如同是数字,按string和Int排序
则可能出现不同的结果。

排序过程中使用了,createDocumentFragment()函数,如果使用document
.createElement(),由于需要多次遍历DOM树,如果表格很大的话,会造成一定
的性能问题,所以采取createDocumentFragment(),将片段创建在内存中,最后
通过查找tbody节点,完成插入操作。
 

下面是一个截图



 好了,代码如下,没有使用第三方的库,可能效果上比较粗糙,但是逻辑功能已经实现,你可以自己设计一些比较漂亮的CSS重新进行“界面化”。

 

判断浏览器类型,并作出相应的返回动作:

/**
 * @param obj the object to judge
 * @return the content of the object.
 */    
function IEorFF(obj){
	if(obj.textContent != null){//IE
		return obj.textContent;
	}else{//FF
		var s = obj.innerText;
		return s.substring(0,s.length);	
	}	
}

 做具体的排序动作:

/**
 * @param tid the id of table element
 * @param col which col to sort
 * @param type the datatype of the selected col.
 * @return null	
 */
function sortTable(tid, col, type){
	var table = document.getElementById(tid);//get the table element
	var tbody = table.tBodies[0];//get the tbody array.
	var colrows = tbody.rows;//get all rows in colrows.
	var trs = new Array;//new a array to store the rows.
	
	for(var i = 0;i < colrows.length-1; i++){//store all rows in array trs.
		trs[i] = colrows[i+1];	
	}
	
	if(table.sortcol == col){//if the selected col is current col, then reverse it.
		trs.reverse();	
	}else{//else sort it.
		trs.sort(compare(col, type));//sort and save the result in the trs array.
	}
	var frag = document.createDocumentFragment();//new a element to store the result.
	
	for(var i = 0;i < trs.length; i++){//fullfill the element with sorted array.
		frag.appendChild(trs[i]);	
	}
	tbody.appendChild(frag);//add the array to tbody.
	
	table.sortcol = col;//set the sortcol to col.	
}

 其中用到了一个外部函数:

compare(value, type)

相当于java中的comparable接口,需要实现自己的排序方式,代码如下:

/**
 * @param col the special col to compare
 * @param type data type of the special col
 * @return 
 *         1 : gt 
 *         0 : eq 
 *        -1 : lt
 */     
function compare(col, type){
	return function(arg1, arg2){
		var v1 = convert(IEorFF(arg1.cells[col]), type);
		var v2 = convert(IEorFF(arg2.cells[col]), type);
		if(v1 > v2){
			return 1;//>
		}else if(v1 < v2){
			return -1;//<	
		}else{
			return 0;//==	
		}
	};	
}

 而这个函数又调用了一个转化器,转换器可以根据不同的类型返回可排序的串:

/**
 * @param value the org value in string type
 * @param type data type of the org value.
 * @return the correct type of the special value.
 */
function convert(value, type){
	switch(type){//convert the value to correct type
		case 'int'://integer
			return parseInt(value);
		case 'float'://float
			return parseFloat(value);
		case 'date'://date
			return new Date(Date.parse(value));
		default://other, admit to be string.
			return value.toString();
	}	
}

 好了,代码就这么点,由于公司要求,所以注释是英文的,我也懒得改了。看看怎么使用吧,

只需要在table/th里加入对点击时间的监听就可以了:

onclick="changeimg(this);sortTable('toSort', 0, 'int')"
 
  • 大小: 5.9 KB
分享到:
评论

相关推荐

    jquery table 排序插件

    它通过对表格中的每一行数据进行比较,根据指定的列和排序方式重新排列这些数据。插件通常会自动处理各种数据类型,如数字、日期和字符串,确保排序的准确性。 在使用jQuery Table Sort插件时,我们需要首先引入...

    js 实现 table 行排序

    === SortTableTool.js 实现table行排序. === 源码中有详细说明.sort_table.html 为示例html. 1.支持的排序数据类型有 Number,...3.默认为只排序第一个tbody,可指定对所有tbody排序. 4.IE8 ,Firefox/3.6.24 下测试通过

    js 对页面table数据排序

    这个函数的主要任务是获取表格数据,根据指定列进行排序,然后重新排列`&lt;tr&gt;`元素。以下是一个简单的实现: ```javascript function sortTable(columnIndex) { // 获取表格元素 const table = document....

    table分页与排序

    JavaScript可以为每个表头单元格添加点击事件监听器,当用户点击时,根据指定的字段对表格数据进行升序或降序排序。排序算法可能包括冒泡排序、快速排序或者更高效的库如`lodash`的`sortBy`方法。同时,为了提供良好...

    html 表单排序

    这个函数会根据指定的列索引(columnIndex)和排序顺序(isAscending)对表格进行排序。 ### 4. jQuery DataTables jQuery DataTables是一个强大的插件,它可以为HTML表格提供排序、过滤、分页等功能。只需引入...

    【RPA之家转载视频教程7】在UiPath中排序数据表-如何在UiPath中对数据表进行排序-RPA技术中心.rar

    1. 使用DataTable活动:这是最直接的方法,通过“Sort”属性来指定排序的列和排序方式。例如,可以添加一个DataTable活动,设置"SortColumns"属性为需要排序的列名,"SortOrders"属性为排序顺序(升序或降序)。 2....

    jQuery实现的分页排序Table组件

    在网页开发中,数据展示是不可或缺的一部分,而jQuery实现的分页排序Table组件则为开发者提供了高效、灵活的方式来处理大量数据的展示问题。这个组件通常用于动态加载和组织表格数据,使得用户可以轻松浏览和操作...

    jquery table的静态排序

    在网页开发过程中,经常需要对表格数据进行排序处理,以便用户能够更方便地查看和管理数据。jQuery Tablesorter插件为实现这一功能提供了一种简单而有效的方法。通过该插件,开发者可以轻松地将静态HTML表格转换成...

    html表格table的表头排序,js代码fastunit使用案例

    然而,为了提供更好的用户体验,我们往往需要对表格中的数据进行排序,特别是在处理大量数据时。`html表格table的表头排序`功能就是为此目的而设计的。用户可以通过点击表头来按指定列对数据进行升序或降序排列,...

    JavaScript Table排序

    JavaScript表格排序是一个常见的需求,特别是在网页中展示数据时。它允许用户通过点击表头来对数据进行升序或降序排列。...记住,实践是提高技能的最佳方式,尝试创建自己的表格排序示例并根据需求进行定制。

    el-table无限滚动+控制列是否显示+列排序(非json)

    至于**列排序**,在`el-table`中,可以使用`sortable`属性来指定列是否可排序,而`sort-method`则用于自定义排序逻辑。默认情况下,`el-table`支持对数字和字符串进行升序或降序排序。如果你的数据结构不是JSON格式...

    jquery实现table的动态排序

    这个函数通过比较相邻行的指定列值来进行排序。首先,它会检查单元格中的值是否为数字,如果是,则转换为数值进行比较;如果都不是数字,就按字符串进行比较。当找到需要交换的行时,会调用`insertBefore`方法来重新...

    table正反排序 JQuery

    这段代码首先获取表格的主体部分(即包含数据的行),然后通过`sort()`方法根据指定列的数据进行排序。排序时,将文本转换为大写并比较,以确保排序不区分大小写。 - **降序排序**:`function SortDes(column)` ...

    Dwz table 分页排序视频

    Dwz Table排序** Dwz table的排序功能使得用户可以根据某一列的数据对整个表格进行升序或降序排列,以快速查找或比较数据。主要特点有: - **列头点击排序**:用户只需点击表格列头,Dwz就会根据该列的数据进行...

    web中table表格点击表头排序文件-博客

    本文将深入探讨如何在Web中的`table`表格实现点击表头进行数据排序的功能,这是一个非常实用且常见于各种数据管理界面的功能。我们将主要关注`tablesorter`这个库,它是一个强大的JavaScript插件,用于实现这一功能...

    table排序

    标题“table排序”指的是在表格数据处理时进行的排序操作,可能是通过编程语言实现,也可能是利用工具进行。下面我们将详细探讨这个主题。 首先,表格排序通常是基于一列或多列的值来调整数据的顺序,以便更容易地...

    table客户端排序 ctrl shift 连选实例

    首先,"Table客户端排序"是指用户可以在不向服务器发送请求的情况下对表格数据进行排序。这种功能通常通过JavaScript在浏览器端实现,减少了网络通信,提高了响应速度。`tablesorter`是一个流行的选择,例如在本实例...

    很灵活的javascript 表格排序 功能强大 可自定义排序规则

    这样,用户就不会因为误操作而对这些不可排序的列进行排序,避免了潜在的混乱。 更进一步,sorttable支持自定义排序规则。这意味着开发者可以为特定列定义自己的排序逻辑。例如,如果表格中的数据是日期格式,我们...

    帆软:排序问题(通过帆软设置或者sql排序)

    1. **ORDER BY子句**:在帆软报表连接的数据源中,如果使用SQL查询数据,可以在查询语句末尾添加`ORDER BY`子句来指定排序字段及顺序。例如,`SELECT * FROM table ORDER BY column ASC/DESC`,`ASC`表示升序,`DESC...

Global site tag (gtag.js) - Google Analytics