Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 807|回复: 0

JavaScript  实现自动排序

[复制链接]

该用户从未签到

发表于 2011-10-20 13:38:38 | 显示全部楼层 |阅读模式
//Author    :   狼Robot
//Contact   :   robot@k2046.cn
//Date      :   2008-04-19
//Explain   :   使Table可以点击排序.

/*使用说明  :
方法1:
    new TableSorter("tb1");
效果:
    id为tb1的table的第一行任意单元格都可以点击进行排序.

方法2:
    new TableSorter("tb1", 0, 1, 3);
效果:
    id为tb1的table的第一行0,1,3单元格可以进行点击排序.
*/

function TableSorter(table)
{
    this.Table = this.$(table);
    if(this.Table.rows.length <= 1)
    {
        return;
    }
    this.Init(arguments);
}

//以下样式针对表头的单元格.
TableSorter.prototype.NormalCss = "NormalCss";//没有执行排序时的样式.
TableSorter.prototype.SortAscCss = "SortAscCss";//升序排序时的样式.
TableSorter.prototype.SortDescCss = "SortDescCss";//降序排序时的样式.

//初始化table的信息和操作.
TableSorter.prototype.Init = function(args)
{
    this.ViewState = [];
    for(var x = 0; x < this.Table.rows[0].cells.length; x++)
    {
        this.ViewState[x] = false;
    }
    if(args.length > 1)
    {
        for(var x = 1; x < args.length; x++)
        {
            if(args[x] > this.Table.rows[0].cells.length)
            {
                continue;
            }
            else
            {
                this.Table.rows[0].cells[args[x]].onclick = this.GetFunction(this,"Sort",args[x]);
                this.Table.rows[0].cells[args[x]].style.cursor = "pointer";
            }
        }
    }
    else
    {
        for(var x = 0; x < this.Table.rows[0].cells.length; x++)
        {
            this.Table.rows[0].cells[x].onclick = this.GetFunction(this,"Sort",x);
            this.Table.rows[0].cells[x].style.cursor = "pointer";
        }
    }
}

//简写document.getElementById方法.
TableSorter.prototype.$ = function(element)
{
    return document.getElementById(element);
}

//取得指定对象的脱壳函数.
TableSorter.prototype.GetFunction = function(variable,method,param)
{
    return function()
    {
        variable[method](param);
    }
}

//执行排序.
TableSorter.prototype.Sort = function(col)
{
    var SortAsNumber = true;
    for(var x = 0; x < this.Table.rows[0].cells.length; x++)
    {
        this.Table.rows[0].cells[x].className = this.NormalCss;
    }
    var Sorter = [];
    for(var x = 1; x < this.Table.rows.length; x++)
    {
        Sorter[x-1] = [this.Table.rows[x].cells[col].innerHTML, x];
        SortAsNumber = SortAsNumber && this.IsNumeric(Sorter[x-1][0]);
    }
    if(SortAsNumber)
    {
        for(var x = 0; x < Sorter.length; x++)
        {
            for(var y = x + 1; y < Sorter.length; y++)
            {
                if(parseFloat(Sorter[y][0]) < parseFloat(Sorter[x][0]))
                {
                    var tmp = Sorter[x];
                    Sorter[x] = Sorter[y];
                    Sorter[y] = tmp;
                }
            }
        }
    }
    else
    {
        Sorter.sort();
    }
    if(this.ViewState[col])
    {
        Sorter.reverse();
        this.ViewState[col] = false;
        this.Table.rows[0].cells[col].className = this.SortDescCss;
    }
    else
    {
        this.ViewState[col] = true;
        this.Table.rows[0].cells[col].className = this.SortAscCss;
    }
   
    var Rank = [];
    for(var x = 0; x < Sorter.length; x++)
    {
        Rank[x] = this.GetRowHtml(this.Table.rows[Sorter[x][1]]);
    }
    for(var x = 1; x < this.Table.rows.length; x++)
    {
        for(var y = 0; y < this.Table.rows[x].cells.length; y++)
        {
            this.Table.rows[x].cells[y].innerHTML = Rank[x-1][y];
        }
    }
    this.OnSorted(this.Table.rows[0].cells[col], this.ViewState[col]);
}

//取得指定行的内容.
TableSorter.prototype.GetRowHtml = function(row)
{
    var result = [];
    for(var x = 0; x < row.cells.length; x++)
    {
        result[x] = row.cells[x].innerHTML;
    }
    return result;
}

TableSorter.prototype.IsNumeric = function(num)
{
    return /^\d+(\.\d+)?$/.test(num);
}

//可自行实现排序后的动作.
TableSorter.prototype.OnSorted = function(cell, IsAsc)
{
    return;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-18 16:25 , Processed in 0.471115 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表