《JavaScript高级程序设计》阅读笔记(十九):表格排序

排序代码

复制代码
function SortTable(sTableID, iCol, sDataType){
    this.oTable=document.getElementById(sTableID);
    this.oTBody=this.oTable.tBodies[0];
    this.colDataRows=this.oTBody.rows;
    this.aTRs=[];
    this.iCol=iCol;
    this.sDataType=sDataType;
}

SortTable.prototype={
    convert:function(sValue, sDataType){
        switch(sDataType){
            case "int":
                return parseInt(sValue);
            case "float":
                return parseFloat(sValue);
            case "date":
                return new Date(sValue);
            default:
                return sValue.toString();
        }
    },
    generateCompareTRs:function(iCol, sDataType, that){
        return function compareTRs(oTR1,oTR2){
                    var vValue1= that.convert(oTR1.cells[iCol].firstChild.nodeValue, sDataType),
                        vValue2= that.convert(oTR2.cells[iCol].firstChild.nodeValue, sDataType);
                    if(vValue1 < vValue2){
                        return -1;
                    } else if(vValue1 > vValue2){
                        return 1;
                    } else{
                        return 0;
                    }
               };
    },
    sort:function(){
        for(var i=0,l=this.colDataRows.length;i<l;i++){
            this.aTRs.push(this.colDataRows[i]);
        }
        if(this.oTable.sortCol === this.iCol){
            this.aTRs.reverse();
        } else {
            this.aTRs.sort(this.generateCompareTRs(this.iCol, this.sDataType, this));
        }

        var oFragment=document.createDocumentFragment();
        for(var i=0,l=this.aTRs.length;i<l;i++){
            oFragment.appendChild(this.aTRs[i]);
        }

        this.oTBody.appendChild(oFragment);
        this.oTable.sortCol = this.iCol;
    }
}
复制代码

调用示例

复制代码
function bindSortTable(sTableID, iCol, sDataType){
    var table=document.getElementById(sTableID),
        ftr=table.tHead.rows[0],
        tds=ftr.cells;
    if(tds[iCol]){
        tds[iCol].onclick=function(){
            var sortTable=new SortTable(sTableID, iCol, sDataType);
            sortTable.sort();
        }
    }
}

window.onload=function(){
    bindSortTable("tblSort",0);
    bindSortTable("tblSort",1);
    bindSortTable("tblSort",2,"int");
    bindSortTable("tblSort",3,"float");
    bindSortTable("tblSort",4,"date");
}
复制代码

将table中的td顺序颠倒

复制代码
function reverseTD(tbid){
    var table=document.getElementById(tbid),
        tbody=table.tBodies[0],
        trs=tbody.rows,
        cols=[];
    for(var i=0,j=trs.length;i<j;i++){
        cols = trs[i].cells;
        trs[i]=document.createElement("tr");
        for(var m=cols.length-1;m>=0;m--){
            trs[i].appendChild(cols[m]);
        }
    }
}

//Test
reverseTD("tableid");
复制代码
posted @   artwl  阅读(839)  评论(4编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具

个人简介

var ME = {
	"name": "土豆/Artwl",
	"job": "coding",
	"languages": [
		"JS", "HTML",
                "CSS", "jQuery"
		"MVC",".NET",
		"设计模式"
	],
	"hobby": [
		"阅读", "旅游",
		"音乐", "电影"
	]
}
TOP
点击右上角即可分享
微信分享提示