js 实现 table 行排序
闲时无聊,参考网上一些资料,写了一个 SortTableTool.js 实现table行排序.
关键代码如下:
/** object
* example : sortTableT.sort('sortTable',0,'Number')
*
**/
var sortTableT = new SortTableTool();
/** function
* SortTableTool
*/
function SortTableTool(){
/** is sort all tBodies */
this.isSortAlltBodies = false;
/** is first descending sort by sortColumn */
this.first_descending = false;
};
/** SortTableTool.sort
* tableId : table.id
* sortColumn : cell's index of row
* nodeType : {'Number' ,'String' ,'Date' ,'NoCaseString'}
*/
SortTableTool.prototype.sort = function(tableId, sortColumn ,nodeType ,_first_descending) {
var table = document.getElementById(tableId);
var _tBodies_length = this.isSortAlltBodies ? table.tBodies.length : 1;
var rowArray = new Array();
var rowIndex = 0;
for(var t=0 ; t< _tBodies_length ; t++){
var tableBody = table.tBodies[t];
var tableRows = tableBody.rows;
for (var i = 0; i < tableRows.length; i++) {
rowArray[rowIndex++] = tableRows[i];
}
}
if( !isNULL(_first_descending) && ( _first_descending == true || _first_descending == false)){
this.first_descending = _first_descending;
}else{
this.first_descending = false;
}
if (table.sortColumn == sortColumn) {
rowArray.reverse();
} else {
rowArray.sort(generateCompareTR(sortColumn, nodeType));
if(this.first_descending){
rowArray.reverse();
}
}
var tbodyFragment = document.createDocumentFragment();
for (var i = 0; i < rowArray.length; i++) {
tbodyFragment.appendChild(rowArray[i]);
}
tableBody.appendChild(tbodyFragment);
table.sortColumn = sortColumn;
}
/**
* generateCompareTR
* @return
*/
var generateCompareTR = function(sortColumn, nodeType) {
return function compareTR(trLeft, trRight) {
var left_firstChild = trLeft.cells[sortColumn].firstChild;
var right_firstChild = trRight.cells[sortColumn].firstChild;
var leftValue = convertData(left_firstChild == null ? "" :left_firstChild.nodeValue, nodeType);
var rightValue = convertData(right_firstChild == null ? "" :right_firstChild.nodeValue, nodeType);
if (leftValue < rightValue) {
return -1;
}else if (leftValue > rightValue) {
return 1;
}else{
return 0;
}
};
}
/**function : convertData
* _value : string value
* _dataType : {'Number' ,'String' ,'Date' ,'NoCaseString'}
* @return
*/
var convertData = function(_value, _dataType) {
var value = isNULL(_value) ? "" : _value;
var dataType = isNULL(_dataType) ? null : _dataType.toLowerCase();
var v_result = null;
switch (dataType) {
case "number":
v_result = new Number(value.trim().replace(/,/g,''));
return isNaN(v_result) ? null : v_result ;
case "string":
return value.toString();
case "nocasestring":
return value.toString().toLowerCase();
case "date":
v_result = new Date(Date.parse(value.trim().trimNBSP().replace(/-/g,'/')));
return isNaN(v_result) ? null : v_result;
default:
return value.toString();
}
}
/**
* isNULL()
* @return true or false
*/
var isNULL=function(v){
return v == null || typeof(v) == 'undefined';
}
/**
* String.prototype.trim()
* @return
*/
String.prototype.trim=function(){
return this.replace(/(^\s*)|(\s*$)/g, '');
}
String.prototype.ltrim=function(){
return this.replace(/(^\s*)/g,'');
}
String.prototype.rtrim=function(){
return this.replace(/(\s*$)/g,'');
}
/**
* String.prototype.trimNBSP()
* @return
*/
String.prototype.trimNBSP=function(){
return this.replace(/^[\s\u3000\xA0]+|[\s\u3000\xA0]+$/g, '');
}
String.prototype.ltrimNBSP=function(){
return this.replace(/^[\s\u3000\xA0]+/g,'');
}
String.prototype.rtrimNBSP=function(){
return this.replace(/[\s\u3000\xA0]+$/g,'');
}
//------------------ over --------------------------
效果如下图:
测试多次,发现一个棘手的问题:
如果单元格中有 ,则 trim() 无法去除 (双字节空格).
尝试多次,终于找到解决办法.新加 trimNBSP() 方法可以去除 (双字节空格).
最后,附上源码.
源码中有 2 个demo示例页.
- 描述: table排序效果图
- 大小: 17.8 KB
分享到:
相关推荐
本资源“js 实现 table 行排序 TableOrder.rar”提供了一个实用的方法来实现这个功能。以下是对该实现的详细说明: 1. **HTML表格结构**: 在HTML中,`<table>`元素用于创建表格,`<tr>`表示表格行,`<th>`表示...
7. **排序实现**:在排序函数中,根据用户点击的表头,确定排序依据(升序或降序)。然后,对数据数组进行排序,并同步更新表格的DOM结构,保持数据与视图的一致性。 8. **性能优化**:对于大量数据,直接操作DOM会...
在JavaScript(js)中,对HTML表格(Table)进行排序是一项常见的需求,特别是在网页交互和数据展示中。...在提供的"js对table的完整排序"文件中,应该包含了完整的实现代码,供学习者参考和实践。
在JavaScript的世界里,实现表格(table)数据的自动排序是一项常见的需求。这通常涉及到对HTML DOM的操作以及数据处理。在给定的资源中,“原生js table表格自动排序效果”提供了一个无需依赖任何外部库(如jQuery...
在网页开发中,数据展示通常会使用表格(Table)元素,而为了使用户能更方便地浏览和理解数据,我们常常需要实现表头点击时自动排序的功能。这个功能的实现主要依赖于JavaScript,因为它提供了对DOM操作和事件监听的...
综上所述,实现“点击table表头字段带箭头标示”的功能涉及到了JavaScript事件处理、DOM操作、数组排序以及UI交互设计。这不仅是提高用户体验的重要手段,也是前端开发者必备的技能之一。通过不断实践和学习,我们...
"实现table表格可按行拖拽,按列排序,并可以保存排序后的结果"是一个常见的需求,尤其适用于数据展示和管理的场景。这里我们将详细探讨如何利用jQuery、jQuery.tablesorter和jQuery.tablednd_0_5这三个JavaScript库...
table列点击排序功能JS实现,表单table显示的时候,点击表单列名实现升序以及降序功能!
本文将深入探讨如何使用JavaScript实现表格数据的排序功能。 首先,我们要理解HTML表格的基本结构,它由`<table>`、`<tr>`(行)、`<th>`(表头)和`<td>`(单元格)组成。排序功能通常针对`<th>`元素,因为它们...
这篇教程将专注于如何使用JavaScript动态地添加、删除Table的行,并实现排序功能,包括删除整行和整列。以下是对这些概念的详细解释: 1. **动态添加Table行:** 要动态添加行,我们可以使用`document....
在JavaScript中,表格(Table)是网页数据展示的常用元素,而动态地增加或删除行则是常见的交互需求。本文将深入探讨如何巧妙地利用JavaScript来实现这个功能。 首先,我们需要了解HTML中的`<table>`元素及其相关...
《js-table-sorter:纯JavaScript实现的表格头排序解析》 在Web开发中,数据的展示和处理是一项常见的任务,而表格(Table)是数据展示的常见方式之一。当表格中的数据量较大或者需要频繁更新时,用户通常期望能够...
程序的实现的是在客户端对表格进行排序,有以下特点: 1.自定义排序列、排序属性(例如innerHTML)、排序数据类型(包括int、float、date、string)、排序顺序(顺序和倒序); 2.自定义排序函数; 3.可同时设置...
在网页开发中,JavaScript(简称JS)是一种必不可少的脚本语言,它被广泛用于实现页面交互和动态功能。本文将详细讲解如何使用JS对页面上的HTML表格数据进行排序,以便用户点击表头时能直接触发排序操作。 首先,...
开发者提供已排序的数据列表以及需要合并行的列名即可,无需后端二次处理数据。 该类以纯原生JS编写,无需引入任何第三方库。 调用方法:new MergeRow(['col1','col2','col3'],data).renderTbl('td001'); 详情...
"js Table 选中行排序 多列锁定(多个OrderBy)"这个主题就是关于如何实现这样的功能。 首先,我们来详细讲解如何实现表格的排序功能。在JavaScript中,我们可以利用HTML的`<table>`元素和`<tr>`(表格行)元素来...
原创亲测至少节约小白两天时间,本人前端小白搞了好几天才实现表格拖动排序。在网上找的(vue3+sortable.js根本跑不起来)网上好多例子在vue3下根据跑不起来于是,也没有对表格排序的例子。Vuedraggable 是基于并...
在本主题中,我们关注的是"bootstrap-table.css 表格拖拽排序",这是一种允许用户通过鼠标拖放操作来改变表格行顺序的功能。这个特性尤其适用于那些需要频繁调整数据顺序的场景,比如任务管理或者项目进度跟踪。 ...