html排序类型,JS HTML TABLE 排序

介绍一个非常使用的table排序JS

// 排序 tableId: 表的id;iCol: 第几列;dataType:iCol对应的列显示数据的数据类型,神奇的排序 JS 插件

// 使用该 js 前提 , 所有的数据类型 即 dataType 一定要正确, iCol是从 0 开始的这点需要注意 , 另外排序行一定要是 thead , 数据一定要使用 tbody

// dataType 可用来扩展支持各种类型数据

// 因为是使用 tbody 来获得数据的,所以数据一定要放在 tbody 中

function sortAble(tableId, iCol, dataType) {

var table = document.getElementById(tableId);

var tbody = table.tBodies[0];

var colRows = tbody.rows;

var aTrs = new Array;

// 将得到的列放入数组,备用

for (var i=0; i < colRows.length; i++) {

aTrs[i] = colRows[i];

}

// 判断上一次排列的列和现在需要排列的是否同一个。如果是则进行反转。

if (table.sortCol == iCol) {

//alert("同列");

aTrs.reverse();

} else {

// 如果不是同一列,使用数组的sort方法,传进排序函数

aTrs.sort(compareEle(iCol, dataType));

}

// 创建文档碎片便于页面优化,这样不需要每一次进行 DOM 操作就刷新一次页面 ... 把所有需要添加的内容追加到文档碎片

var oFragment = document.createDocumentFragment();

for (var i=0; i < aTrs.length; i++) {

oFragment.appendChild(aTrs[i]);

}

tbody.appendChild(oFragment);

// 记录最后一次排序的列索引

table.sortCol = iCol;

}

// 将列的类型转化成相应的可以排列的数据类型,里面可以自由进行添加自己想要用来排序的特殊类型,比如这里我就使用了带有特殊符号的数据

function convert(sValue, dataType) {

var temp = "";

switch(dataType) {

case "int":

if (sValue == "-") {

temp = "10000";

} else if (sValue.indexOf("↑") > 0) {

temp = sValue.substr(0, sValue.indexOf("↑"));

} else if (sValue.indexOf("↓") > 0) {

temp = sValue.substr(0, sValue.indexOf("↓"));

} else {

temp = sValue;

}

return parseInt(temp);

case "float":

return parseFloat(sValue);

case "date":

return new Date(Date.parse(sValue));

// 添加 rankChange compare 对于 排名上升下降做了可排序处理

case "rankChange":

if (sValue.indexOf("↑") >= 0){

temp = sValue.substr(sValue.indexOf("↑") + 1,sValue.length);

}else if (sValue.indexOf("↓") >= 0){

temp = '-' + sValue.substr(sValue.indexOf("↓") + 1,sValue.length);

}else {

//donothing

}

return parseInt(temp);

default:

return sValue.toString();

}

}

// 排序函数,iCol表示列索引,dataType表示该列的数据类型

function compareEle(iCol, dataType) {

return function (oTR1, oTR2) {

var vValue1 = convert(ieOrFireFox(oTR1.cells[iCol]), dataType);

var vValue2 = convert(ieOrFireFox(oTR2.cells[iCol]), dataType);

if (vValue1 < vValue2) {

return -1;

} else if (vValue1 > vValue2) {

return 1;

} else {

return 0;

}

};

}

function ieOrFireFox(ob) {

if (ob.textContent != null)

return ob.textContent;

var s = ob.innerText;

return s.substring(0, s.length);

}

//排序tableId:表的id;iCol:第几列;dataType:iCol对应的列显示数据的数据类型

//使用该js前提,所有的数据类型即dataType一定要正确,iCol是从0开始的这点需要注意,另外排序行一定要是thead ,数据一定要使用tbody

// dataType可用来扩展支持各种类型数据

//因为是使用tbody来获得数据的,所以数据一定要放在tbody中

function sortAble(tableId, iCol, dataType) {

var table = document.getElementById(tableId);

var tbody = table.tBodies[0];

var colRows = tbody.rows;

var aTrs = new Array;

//将得到的列放入数组,备用

for (var i=0; i < colRows.length; i++) {

aTrs[i] = colRows[i];

}

//判断上一次排列的列和现在需要排列的是否同一个。如果是则进行反转。

if (table.sortCol == iCol) {

aTrs.reverse();

} else {

//如果不是同一列,使用数组的sort方法,传进排序函数

aTrs.sort(compareEle(iCol, dataType));

}

//创建文档碎片便于页面优化,这样不需要每一次进行DOM操作就刷新一次页面...把所有需要添加的内容追加到文档碎片

var oFragment = document.createDocumentFragment();

for (var i=0; i < aTrs.length; i++) {

oFragment.appendChild(aTrs[i]);

}

tbody.appendChild(oFragment);

//记录最后一次排序的列索引

table.sortCol = iCol;

}

//将列的类型转化成相应的可以排列的数据类型,里面可以自由进行添加自己想要用来排序的特殊类型,比如这里我就使用了带有特殊符号的数据

function convert(sValue, dataType) {

var temp = "";

switch(dataType) {

case "int":

if (sValue == "-") {

temp = "10000";

} else if (sValue.indexOf("↑") > 0) {

temp = sValue.substr(0, sValue.indexOf("↑"));

} else if (sValue.indexOf("↓") > 0) {

temp = sValue.substr(0, sValue.indexOf("↓"));

} else {

temp = sValue;

}

return parseInt(temp);

case "float":

return parseFloat(sValue);

case "date":

return new Date(Date.parse(sValue));

//添加rankChange compare对于排名上升下降做了可排序处理

case "rankChange":

if (sValue.indexOf("↑") >= 0){

temp = sValue.substr(sValue.indexOf("↑") + 1,sValue.length);

}else if (sValue.indexOf("↓") >= 0){

temp = '-' + sValue.substr(sValue.indexOf("↓") + 1,sValue.length);

}else {

//donothing

}

return parseInt(temp);

default:

return sValue.toString();

}

}

//排序函数,iCol表示列索引,dataType表示该列的数据类型

function compareEle(iCol, dataType) {

return function (oTR1, oTR2) {

var vValue1 = convert(ieOrFireFox(oTR1.cells[iCol]), dataType);

var vValue2 = convert(ieOrFireFox(oTR2.cells[iCol]), dataType);

if (vValue1 < vValue2) {

return -1;

} else if (vValue1 > vValue2) {

return 1;

} else {

return 0;

}

};

}

function ieOrFireFox(ob) {

if (ob.textContent != null)

return ob.textContent;

var s = ob.innerText;

return s.substring(0, s.length);

}

使用的话html的结构如下

排名 分数

1 30

…以下省略

table>

使用的时候这里用到了jquery中的一些方法,假如大家不熟悉的话可以去看看w3cschool,不过使用js方法也是可以做到的。这里只介绍jquery的方法了。

首先获得需要排名的元素

$(“sortOne”).bind(“click”,function(){ sortAble(“sortTable”,”int”) ;});

这样传入需要排序的table名称和对应的列元素的类型即可…

这个排序完全是使用相关可操控的元素写成的哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值