实现列表排序

首先主要实现一个功能列表排序,点击成绩,会出现分数倒序排列,再点击一次,会出现分数正序排列。
怎么思考这个问题:
首先怎么获取值,在这里通过DOM操作取出列表里面的所有值,放入一个二维数组里面。
其次是排序,在js里面有一个.sort()方法,里面传个函数:正序:该函数两个两个判断,如果val1<val2,返回-1,相等是0,否则返回1;倒序则反过来。
最后是点击事件触发切换,在这里设置一个状态值,通过false和true切换,这是一个常用技巧,尤其是在框架使用过程中,然后把排序后的值全部附进表格里面。
show

html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<table>  
<tr>
<td>姓名</td>
<td>性别</td>
<td id="grade">成绩</td>
</tr>
<tr>
<td>张三</td>
<td>男</td>
<td>78</td>
</tr>
<tr>
<td>李四</td>
<td>女</td>
<td>88</td>
</tr>
<tr>
<td>王二</td>
<td>男</td>
<td>34</td>
</tr>
</table>

css

1
2
3
4
5
6
7
table {  
border-collapse: collapse;
border:none;
}
td{
border:solid #000 1px;
}

js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
(function(){  
//递增函数
var state = false;
function dizeng(val1,val2){
if(val1[2] < val2[2]){
return -1;
} else if(val1[2] === val2[2]){
return 0;
} else {
return 1;
}
}
//递减函数
function dijian(val1,val2){
if(val1[2] < val2[2]){
return 1;
} else if(val1[2] === val2[2]){
return 0;
} else {
return -1;
}
}
//数据数组化
var arr = new Array();
var $tr = $("table").find("tr");
for(let i=1;i<$tr.length;i++){
var $td = $tr.eq(i).find($("td"));
arr[i-1] = new Array();
for(let j=0;j<$td.length;j++){
arr[i-1][j] = $td.eq(j).html();
}
}
//触发点击事件
$("#grade").click(function(){ //排序
if(state){
arr.sort(dizeng);
state = false;
} else {
arr.sort(dijian);
state = true;
}
for (let i=1;i<$tr.length;i++) {
var $td = $tr.eq(i).find($("td"));
for(let j = 0;j < $td.length; j++) {
$td.eq(j).html(arr[i-1][j]);
}
}
console.log(arr);
});
})();
坚持原创技术分享,您的支持将鼓励我继续创作!