html元素排序,HTML中的table里面的元素排序

我们在上网中都能看到很多能够排序的,如大小,时间等

现在我们也试一下排序功能:

排序的函数代码:里面含有点击之后排序--还原,和排升序和降序

function sortAge(){

//对年龄进行排序,要先进行获得每一行对象,然后对象对象中的第一个(从0 开始)的大小进行排序

var tabNode = document.getElementById("tabid");

var rows0 = tabNode.rows;

var rows1 = [];

//现将元素拷贝一份出来, 第一行不用排序

for (var x = 1; x < rows0.length; x++) {

rows1[x - 1] = rows0[x];

}

for (var x = 0; x < rows1.length - 1; x++) {//每个元素是行对象

for (var y = x + 1; y < rows1.length; y++) {

//对每一行的内容进行解析成数字

if (parseInt(rows1[x].cells[1].innerHTML) > parseInt(rows1[y].cells[1].innerHTML)) {

//alert("aa="+x+":"+rows1[x].cells[1].innerHTML);

//alert("bb"+rows1[y].cells[1].innerHTML);

var temp = rows1[x];

rows1[x] = rows1[y];

rows1[y] = temp;

}

}

}

/* 点击之后排序,排序之后恢复之前的状态

if (flag){

for (var x = 0; x < rows1.length; x++) {

//tabNode.childNodes[0].appendChild(rows[x]);//方法一: 不一定兼容

rows1[x].parentNode.appendChild(rows1[x]);

}

}else{

for (var x = 1; x < rows0.length; x++) {

//tabNode.childNodes[0].appendChild(rows[x]);//方法一: 不一定兼容

rows0[x].parentNode.appendChild(rows0[x]);

}

}

flag=!flag;*/

/* 下面的是点之后出现正序和逆序显示 正序和逆序的区别就是appendchild的前后关系而已*/

var ageimg=document.getElementById("ageid");

if (flag) {

for (var x = 0; x < rows1.length; x++) {//排好序之后就从0开始

//tabNode.childNodes[0].appendChild(rows[x]);//方法一: 不一定兼容

rows1[x].parentNode.appendChild(rows1[x]);

}

ageimg.innerHTML="年龄▲";//设置上面的图标

}else{

for (var x = rows1.length-1; x >=0; x--) {

//tabNode.childNodes[0].appendChild(rows[x]);//方法一: 不一定兼容

rows1[x].parentNode.appendChild(rows1[x]);

}

ageimg.innerHTML="年龄▼"

}

flag=!flag;

loading();//排序之后还要对颜色重新设置

} 设置表格的背景颜色代码《导入的css》:

function loading(){

var name;

var tabNode=document.getElementById("tabid");

var rows=tabNode.rows;//获得每一行的数组对象

var rowslength=rows.length;//每一行的长度

for(var x=1;x

if(x%2==0){

rows[x].className="one";

}else{

rows[x].className="two";

}

//当移动上去之后,之前的颜色要记录下来,不然移下来之后全部都是一个颜色了

rows[x].οnmοuseοver=function(){

name=this.className;

this.className="three";

}

rows[x].οnmοuseοut=function(){

this.className=name;

}

}

}

οnlοad=function(){

loading();

}

css代码:

table td a:hover{

background-color:#0080c0;

}

.one{

background-color:#80ff00;

}

.two{

background-color:#ff8040;

}

.three{

background-color:#008040;

}

table{

width:500px;

height:500px;

border:#400040 solid 2px;

border-collapse:collapse;

}

table td,th{

border:solid 2px;

}

table th{

background-color:#c0c0c0;

} 效果图  排序之前:

0818b9ca8b590ca3270a3433284dd417.png

升序:

0818b9ca8b590ca3270a3433284dd417.png

降序:

0818b9ca8b590ca3270a3433284dd417.png

完整代码:

sort.html

table td a:hover{

background-color:#0080c0;

}

.one{

background-color:#80ff00;

}

.two{

background-color:#ff8040;

}

.three{

background-color:#008040;

}

table{

width:500px;

height:500px;

border:#400040 solid 2px;

border-collapse:collapse;

}

table td,th{

border:solid 2px;

}

table th{

background-color:#c0c0c0;

}

function loading(){

var name;

var tabNode=document.getElementById("tabid");

var rows=tabNode.rows;//获得每一行的数组对象

var rowslength=rows.length;//每一行的长度

for(var x=1;x

if(x%2==0){

rows[x].className="one";

}else{

rows[x].className="two";

}

//当移动上去之后,之前的颜色要记录下来,不然移下来之后全部都是一个颜色了

rows[x].οnmοuseοver=function(){

name=this.className;

this.className="three";

}

rows[x].οnmοuseοut=function(){

this.className=name;

}

}

}

οnlοad=function(){

loading();

}

var flag=true;

function sortAge(){

//对年龄进行排序,要先进行获得每一行对象,然后对象对象中的第一个(从0 开始)的大小进行排序

var tabNode = document.getElementById("tabid");

var rows0 = tabNode.rows;

var rows1 = [];

//现将元素拷贝一份出来, 第一行不用排序

for (var x = 1; x < rows0.length; x++) {

rows1[x - 1] = rows0[x];

}

for (var x = 0; x < rows1.length - 1; x++) {//每个元素是行对象

for (var y = x + 1; y < rows1.length; y++) {

//对每一行的内容进行解析成数字

if (parseInt(rows1[x].cells[1].innerHTML) > parseInt(rows1[y].cells[1].innerHTML)) {

//alert("aa="+x+":"+rows1[x].cells[1].innerHTML);

//alert("bb"+rows1[y].cells[1].innerHTML);

var temp = rows1[x];

rows1[x] = rows1[y];

rows1[y] = temp;

}

}

}

/* 点击之后排序,排序之后恢复之前的状态

if (flag){

for (var x = 0; x < rows1.length; x++) {

//tabNode.childNodes[0].appendChild(rows[x]);//方法一: 不一定兼容

rows1[x].parentNode.appendChild(rows1[x]);

}

}else{

for (var x = 1; x < rows0.length; x++) {

//tabNode.childNodes[0].appendChild(rows[x]);//方法一: 不一定兼容

rows0[x].parentNode.appendChild(rows0[x]);

}

}

flag=!flag;*/

/* 下面的是点之后出现正序和逆序显示 正序和逆序的区别就是appendchild的前后关系而已*/

var ageimg=document.getElementById("ageid");

if (flag) {

for (var x = 0; x < rows1.length; x++) {//排好序之后就从0开始

//tabNode.childNodes[0].appendChild(rows[x]);//方法一: 不一定兼容

rows1[x].parentNode.appendChild(rows1[x]);

}

ageimg.innerHTML="年龄▲";//设置上面的图标

}else{

for (var x = rows1.length-1; x >=0; x--) {

//tabNode.childNodes[0].appendChild(rows[x]);//方法一: 不一定兼容

rows1[x].parentNode.appendChild(rows1[x]);

}

ageimg.innerHTML="年龄▼"

}

flag=!flag;

loading();//排序之后还要对颜色重新设置

}

姓名年龄出生地
张三13湖南长沙
李四15湖南常德
jack45湖南临澧
王华23浙江杭州
张进30安微合肥
周全23湖南益阳
杨哥42湖南常德
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用HTML和JavaScript实现带排序的表格。以下是一个简单的示例代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>带排序的表格</title> <style> th { cursor: pointer; user-select: none; } </style> </head> <body> <table id="myTable"> <thead> <tr> <th>姓名</th> <th>年龄</th> <th>分数</th> </tr> </thead> <tbody> <tr> <td>Tom</td> <td>20</td> <td>80</td> </tr> <tr> <td>Jerry</td> <td>18</td> <td>90</td> </tr> <tr> <td>Mike</td> <td>25</td> <td>75</td> </tr> <tr> <td>John</td> <td>22</td> <td>85</td> </tr> <tr> <td>Lucy</td> <td>19</td> <td>95</td> </tr> </tbody> </table> <script> var table = document.getElementById('myTable'); var ths = table.getElementsByTagName('th'); var tbody = table.getElementsByTagName('tbody')[0]; var rows = tbody.getElementsByTagName('tr'); var arr = []; // 将tbody的行转换为数组 for (var i = 0; i < rows.length; i++) { arr[i] = rows[i]; } // 点击表头时排序 for (var i = 0; i < ths.length; i++) { ths[i].onclick = function() { var index = this.getAttribute('data-index'); var type = this.getAttribute('data-type'); var dataType = this.getAttribute('data-dataType'); var cellData = []; // 将当前列的数据存入数组 for (var j = 0; j < rows.length; j++) { var cell = rows[j].getElementsByTagName('td')[index]; var value = cell.textContent || cell.innerText; if (dataType === 'number') { cellData[j] = parseFloat(value); } else if (dataType === 'date') { cellData[j] = Date.parse(value); } else { cellData[j] = value; } } // 根据数据类型和排序方式进行排序 if (type === 'asc') { this.setAttribute('data-type', 'desc'); cellData.sort(function(a, b) { return dataType === 'string' ? a.localeCompare(b) : a - b; }); } else { this.setAttribute('data-type', 'asc'); cellData.sort(function(a, b) { return dataType === 'string' ? b.localeCompare(a) : b - a; }); } // 根据排序后的数组重排tbody的行 for (var j = 0; j < cellData.length; j++) { for (var k = 0; k < rows.length; k++) { var cell = rows[k].getElementsByTagName('td')[index]; var value = cell.textContent || cell.innerText; if (dataType === 'number') { if (parseFloat(value) === cellData[j]) { tbody.appendChild(rows[k]); break; } } else if (dataType === 'date') { if (Date.parse(value) === cellData[j]) { tbody.appendChild(rows[k]); break; } } else { if (value === cellData[j]) { tbody.appendChild(rows[k]); break; } } } } }; ths[i].setAttribute('data-index', i); ths[i].setAttribute('data-type', 'asc'); ths[i].setAttribute('data-dataType', 'string'); } </script> </body> </html> ``` 在上述代码,我们首先定义了一个带表头和表身的表格,并给表头的每个单元格添加了一个data-index属性,表示该单元格对应的列的索引。然后,通过JavaScript代码获取表格元素和相关元素,并将表身的行转换为一个数组arr。 接下来,我们通过为表头的单元格绑定onclick事件来实现排序功能。在点击表头单元格时,首先获取该单元格的data-index、data-type和data-dataType属性值。其,data-type属性表示当前排序方式(升序或降序),data-dataType属性表示当前列的数据类型(字符串、数字或日期)。 然后,我们根据data-dataType属性和当前排序方式对当前列的数据进行排序,并将排序后的数据存入一个数组cellData排序完成后,根据排序后的cellData数组重新排列表身的行,并将排列后的行重新添加到表身。 需要注意的是,本例只实现了对字符串、数字和日期类型的数据进行排序,如果需要对其他类型的数据进行排序,还需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值