万恶的成绩排名
考完试本来成绩就差,还得排名次,还得按单科排。。。不知道这样很伤自尊么,从小到大提起来这个就有心理阴影。。
吐槽完了,我们来看这个小作业吧。。。囧。。。
先上图,,类似这样的一个表格,我们需要做到的是,单击某一科的表头,按照该科所有同学成绩降序排列,并根据成绩给出同学的排名。
看起来应该不难(谁说的?~~),按道理将应该用<table>标签来绘制这个表格,好吧,我是野路子。竟然用了4个<dl>来做这个作业。我是坑货我承认,那么我们先来实现这个效果。
说一下实现方法的一些关键点吧。
第一时间想到的是用sort();方法将已经存入Array[]的英语成绩进行排序,那么很简单。这个方法会轻松地升序排列出成绩,然后用reverse()方法改为降序就OK了。那么问题来了(二货们自行脑补~~~):怎么样才能让姓名也跟着这个数组进行排序呢?利用sort();方法想了半天也没相通(才疏学浅)。那么我就想到了自己写排序的方法。
例:Array1 = 英语成绩;
Array2 = 姓名;
for(i=0;i<Array1.length;i++){
for(j=i+1;j<Array1.length+1;j++){
var tmp;
if(Array1[i]<Array1[j]){
tmp = Array1[i];
Array1[i] = Array1[j];
Array1[j] = tmp;
tmp = Array2[i];
Array2[i] = Array2[j];
Array2[j] = tmp;
}
}
}
通过这个排序函数对Array1(英语成绩)进行排序的同时,每一步排序动作会同时对Array2(姓名)进行相同的操作。如此以来,问题解决。
附上源代码。
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <style> 7 *{ margin: 0; 8 padding: 0; 9 } 10 dt,dd{ 11 width: 100px; 12 height: 30px; 13 border: 1px solid #C0C0C0; 14 font-size: 15px; 15 line-height: 30px; 16 text-align: center; 17 vertical-align: center; 18 } 19 div{ 20 overflow: hidden; 21 } 22 dl{ 23 float: left; 24 } 25 </style> 26 </head> 27 <body> 28 <div> 29 <dl id="name"> 30 <dt id="name">姓名 31 <dd>大毛</dd> 32 <dd>二毛</dd> 33 <dd>三毛</dd> 34 <dd>小明</dd> 35 <dd>小红</dd> 36 <dd>小兰</dd> 37 <dd>张三</dd> 38 <dd>李四</dd> 39 <dd>王五</dd> 40 <dd>赵六</dd> 41 </dt> 42 </dl> 43 <dl id="en"> 44 <dt id="btnen">英语 45 <dd>37</dd> 46 <dd>73</dd> 47 <dd>56</dd> 48 <dd>62</dd> 49 <dd>81</dd> 50 <dd>53</dd> 51 <dd>69</dd> 52 <dd>88.5</dd> 53 <dd>63</dd> 54 <dd>74</dd> 55 </dt> 56 </dl> 57 <dl id="ma"> 58 <dt id="btnma">数学 59 <dd>53</dd> 60 <dd>81</dd> 61 <dd>73.5</dd> 62 <dd>66.5</dd> 63 <dd>90</dd> 64 <dd>54</dd> 65 <dd>68</dd> 66 <dd>43</dd> 67 <dd>65.5</dd> 68 <dd>83</dd> 69 </dt> 70 </dl> 71 <dl id="lu"> 72 <dt id="btnlu">语文 73 <dd>71</dd> 74 <dd>49</dd> 75 <dd>53.5</dd> 76 <dd>60.5</dd> 77 <dd>81</dd> 78 <dd>80</dd> 79 <dd>67</dd> 80 <dd>69</dd> 81 <dd>57</dd> 82 <dd>89</dd> 83 </dt> 84 </dl> 85 </div> 86 </body> 87 <script> 88 var odten = document.getElementById("btnen"); 89 var odtma = document.getElementById("btnma"); 90 var odtlu = document.getElementById("btnlu"); 91 var oddens = document.getElementById("en").getElementsByTagName("dd"); 92 var oddnms = document.getElementById("name").getElementsByTagName("dd"); 93 var oddmas = document.getElementById("ma").getElementsByTagName("dd"); 94 var oddlus = document.getElementById("lu").getElementsByTagName("dd"); 95 var arren = new Array(); 96 var arrma = new Array(); 97 var arrlu = new Array(); 98 var arrnme = new Array(); 99 var arrnmm = new Array(); 100 var arrnml = new Array(); 101 for(var i=0;i<oddens.length;i++){ 102 arren[i] = oddens[i].innerHTML; 103 arrma[i] = oddmas[i].innerHTML; 104 arrlu[i] = oddlus[i].innerHTML; 105 arrnme[i] = oddnms[i].innerHTML; 106 arrnmm[i] = oddnms[i].innerHTML; 107 arrnml[i] = oddnms[i].innerHTML; 108 } 109 odten.onclick = sorten; 110 odtma.onclick = sortma; 111 odtlu.onclick = sortlu; 112 function sorten(){ 113 odten.style.background = "red"; 114 odtma.style.background = ""; 115 odtlu.style.background = ""; 116 for(var i=0;i<oddens.length;i++){ 117 for(var j=i+1;j<oddens.length+1;j++){ 118 var tmp; 119 if(arren[i]<arren[j]){ 120 tmp = arren[i]; 121 arren[i] = arren[j]; 122 arren[j] = tmp; 123 tmp = arrnme[i]; 124 arrnme[i] = arrnme[j]; 125 arrnme[j] = tmp; 126 } 127 } 128 } 129 for(var i=0;i<oddens.length;i++){ 130 oddens[i].innerHTML = arren[i]; 131 oddnms[i].innerHTML = arrnme[i]; 132 } 133 } 134 function sortma(){ 135 odtma.style.background = "red"; 136 odten.style.background = ""; 137 odtlu.style.background = ""; 138 for(var i=0;i<oddmas.length;i++){ 139 for(var j=i+1;j<oddmas.length+1;j++){ 140 var tmp; 141 if(arrma[i]<arrma[j]){ 142 tmp = arrma[i]; 143 arrma[i] = arrma[j]; 144 arrma[j] = tmp; 145 tmp = arrnmm[i]; 146 arrnmm[i] = arrnmm[j]; 147 arrnmm[j] = tmp; 148 } 149 } 150 } 151 for(var i=0;i<oddens.length;i++){ 152 oddmas[i].innerHTML = arrma[i]; 153 oddnms[i].innerHTML = arrnmm[i]; 154 } 155 } 156 function sortlu(){ 157 odtlu.style.background = "red"; 158 odten.style.background = ""; 159 odtma.style.background = ""; 160 for(var i=0;i<oddlus.length;i++){ 161 for(var j=i+1;j<oddlus.length+1;j++){ 162 var tmp; 163 if(arrlu[i]<arrlu[j]){ 164 tmp = arrlu[i]; 165 arrlu[i] = arrlu[j]; 166 arrlu[j] = tmp; 167 tmp = arrnml[i]; 168 arrnml[i] = arrnml[j]; 169 arrnml[j] = tmp; 170 } 171 } 172 } 173 for(var i=0;i<oddens.length;i++){ 174 oddlus[i].innerHTML = arrlu[i]; 175 oddnms[i].innerHTML = arrnml[i]; 176 } 177 } 178 </script> 179 </html>