javascript实现表格升序降序排列

javascript实现表格升序降序排列的步骤如下:

1,生成表格,并给各列表头添加onclick的排序响应函数

2,取得表格各行的数据,并存入临时数组

3,对该临时数组进行排序

4,利用createDocumentFragment,appendChild方法把排序好的数组转换成表格输出,至此排序完毕。

详细代码如下: 经测试可以直接使用

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta charset="utf-8"/>
<title>TableSorter</title>
<style type="text/css">
body{font-size:12px;line-height:25px;}
tr{height:25px;}
th{font-size:14px;border-bottom:solid 1px #DDDDDD;background-color:#EEEEEE;border:solid 1px;}
td{font-size:12px;text-align:center;border:solid 1px;}
</style>

</head>
<body>

<table border="0" id="tbl" style="border:solid 1px #DDDDDD;width:360px;" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th id="th0" onclick = "tablesort(‘tbl‘,0)" >name</th>
<th id="th1" onclick = "tablesort(‘tbl‘,1)" >muscle</th>
<th id="th2" onclick = "tablesort(‘tbl‘,2)" >smart</th>
<th id="th3" onclick = "tablesort(‘tbl‘,3)" >city</th>
</tr>
</thead>
<tbody>
<tr>
<td>Andrew</td>
<td>17</td>
<td>24</td>
<td>武汉</td>
</tr>
<tr>
<td>Jack</td>
<td>13</td>
<td>29</td>
<td>北京</td>
</tr>
<tr>
<td>Zack</td>
<td>7</td>
<td>4</td>
<td>上海</td>
</tr>
<tr>
<td>Bill</td>
<td>37</td>
<td>34</td>
<td>天津</td>
</tr>
</tbody>
</table>
<script type="text/javascript">
var Sortcol=-1;
var Sort_flg=[true,true,true,true];
function tablesort(tableid,colidx){
    var table=document.getElementById(tableid);
    var table_tbody=table.getElementsByTagName("tbody")[0];
    var table_tr=table_tbody.getElementsByTagName("tr");  //取得表格的数据行数

    //把表格的各行数据存入临时数组,并进行排序
    Sortcol = colidx;
    var tmp_tr_array=new Array();
    for(var cnt=0;cnt<table_tr.length;cnt++){
        tmp_tr_array.push(table_tr[cnt]);
    }
    tmp_tr_array.sort(sortfunc);

    //生成一个排好序的文档碎片
    var fragment = document.createDocumentFragment();
    for(var cnt=0;cnt<tmp_tr_array.length;cnt++){
        fragment.appendChild(tmp_tr_array[cnt]);  //该方法调用后,页面上的原表格中的此行将消失不见
    }
    //至此,页面上的原表格只剩下表头

    //把排好序的文档碎片接入原表格,排序完毕
    table_tbody.appendChild(fragment);

    //点击后给表头添加排序的箭头
    setCSSforTH(colidx);
}

function setCSSforTH(colidx){
    //clear all th style
    for(var cnt=0;cnt<4;cnt++){
        document.getElementById("th"+cnt).style = "";
    }

    //add style for clicking th
    if(Sort_flg[colidx]){
        Sort_flg[colidx]=false;
        document.getElementById("th"+colidx).style = "background-image:url(http://images.cnblogs.com/cnblogs_com/cloudgamer/169629/r_2.jpg);background-repeat:no-repeat;background-position:right center;";
    }else{
        Sort_flg[colidx]=true;
        document.getElementById("th"+colidx).style = "background-image:url(http://images.cnblogs.com/cnblogs_com/cloudgamer/169629/r_1.jpg);background-repeat:no-repeat;background-position:right center;";
    }
}

function sortfunc(a,b){
    var value1 = a.getElementsByTagName("td")[Sortcol].innerHTML;
    var value2 = b.getElementsByTagName("td")[Sortcol].innerHTML;

    if(Sort_flg[Sortcol]){
    //升序排列
        if(isNaN(value1)){
            return value1.localeCompare(value2);  //字符串比较
        }else{
            return Number(value1)-Number(value2); //数值比较
        }
    }else{
    //降序排列
        if(isNaN(value1)){
            return value2.localeCompare(value1);
        }else{
            return Number(value2)-Number(value1);
        }
    }
}
</script>
</body>
</html>
时间: 2024-08-04 03:55:55

javascript实现表格升序降序排列的相关文章

笔记:mysql升序排列asc,降序排列desc

经常会忘记mysql中升序和降序用什么字符来表示,现在就做个笔记:升序排列asc,降序排列desc,举个例子,下面是按时间降序调用栏目的文章,也即是栏目最新文章 [e:loop={"select classid, classname, classpath from `[!db.pre!]enewsclass` where classid=275 order by classid desc limit 9 ",100,24,0}]<ul><li><a hre

使用TreeSet和Comparator,写TreeSetTest2 要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列

/* * 使用TreeSet和Comparator,写TreeSetTest2 *要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列, *排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列 */ import java.util.Comparator; import java.util.TreeSet; public class TreeTest2 { public static void main(String[] args) { // TODO Aut

按工资降序排列,若工资相同,则按照雇佣日期尚需排列,获取6~10 条记录

如题:按工资降序排列,若工资相同,则按照雇佣日期尚需排列,获取6~10 条记录 1 获取工资降序,雇佣日期升序的员工列表 select * from emp order by sal desc, hiredate asc; 2 获取rownun变量 select t.*, rownum rn from (select * from emp order by sal desc, hiredate asc) t; 3 获取6~10条记录 select a.* from (select t.*, ro

Shell练习 统计单词个数,降序排列

原文:https://leetcode.com/problems/word-frequency/ Write a bash script to calculate the frequency of each word in a text file words.txt. For simplicity sake, you may assume: words.txt contains only lowercase characters and space ' ' characters. Each wo

在一组降序排列的数组中插入一个数据,插入后,数组中数据依然按降序排列

分析: 1.数组固定,是一个倒序的数组 2.插入一个数据,这个数据插在哪呢,要比较,与数组中所有的元素比较,这里需要一个循环,因为是降序的数组,所以当第一次遇到比自己小的,那么这个位置就是要插入的位置 3.因为上一步被占了位置,那么从这个插入的数据开始,后面的原本的数据都得向右移一位 /** * */ package com.cn.u4; import java.util.Scanner; /** * @author Administrator *向有序数组中插入学员成绩 * 在一组降序排列的数

转&lt;&lt;C#集合Dictionary中按值的降序排列

转载地址:http://blog.sina.com.cn/s/blog_5c5bc9070100pped.html C#集合Dictionary中按值的降序排列 static void Main(string[] args) { Dictionary<string, int> dt = new Dictionary<string, int>(); dt.Add("美丽",2); dt.Add("校园",1); dt.Add("大学&

//输入学生人数,挨个输入姓名,身高,年龄,求平均年龄,然后按身高降序排列输出

13:52:49N U L L 2014/12/19 13:52:49using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text; namespace _1120_1210{    class JieGouTi    {        //输入学生人数,挨个输入姓名,身高,年龄,求平均年龄,然后按身高降序排列输出        public s

查询价格大于或等于&quot;超级本&quot;价格的商品,并且按价格降序排列

-- 查询价格大于或等于"超级本"价格的商品,并且按价格降序排列 //ANY用法 //与比较操作符联合使用,表示与子查询返回的任何值比较为 TRUE ,则返回 TRUE //简单案例 SELECT s1 FROM table1 WHERE s1 > ANY (SELECT s2 FROM table2) 1)在子查询中,返回的是 table2 的所有 s2 列结果(5,12,20) 2)然后将 table1 中的 s1 的值与之进行比较, 3)只要大于 s2 的任何值即表示为 T

(五)、利用命令行参数输入三个整数,并对三个数字进行降序排列

1 /*利用命令行参数输入三个整数,并对三个数字进行降序排列. 2 –PS:将字符串转换为数字的方法 3 •int num=Integer.parseInt(String number);*/ 4 package com.gen; 5 6 public class ArgumentOrder { 7 public static void main(String args[]) 8 { 9 System.out.println("Please input three number by args: