zoukankan      html  css  js  c++  java
  • 另外一个table排序,这个更简单了,不用改变现在的表格结构

    代码
      1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd"> 
      2 <HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>JavaScript实现可自定义排序的表格 - </TITLE> 
      3 <META http-equiv=Content-Type content="text/html; charset=gb2312"> 
      4 <STYLE type=text/css>BODY { 
      5 FONT-SIZE: 0.8em; FONT-FAMILY: Trebuchet MS, Lucida Sans Unicode, Arial, sans-serif 
      6 } 
      7 { 
      8 FONT-WEIGHT: bold; MARGIN-BOTTOM: 0px 
      9 } 
     10 .tableWidget_headerCell { 
     11 BORDER-RIGHT: #aca899 1px solid; BORDER-LEFT: #fff 1px solid; CURSOR: pointer; BORDER-BOTTOM: #c5c2b2 3px solid; BACKGROUND-COLOR: #ece9d8 
     12 } 
     13 .tableWigdet_headerCellOver { 
     14 BORDER-RIGHT: #aca899 1px solid; BORDER-LEFT: #fff 1px solid; CURSOR: pointer; BORDER-BOTTOM: #c5c2b2 3px solid; BACKGROUND-COLOR: #ece9d8 
     15 } 
     16 .tableWigdet_headerCellDown { 
     17 BORDER-RIGHT: #aca899 1px solid; BORDER-LEFT: #fff 1px solid; CURSOR: pointer; BORDER-BOTTOM: #c5c2b2 3px solid; BACKGROUND-COLOR: #ece9d8 
     18 } 
     19 .tableWidget_headerCell { 
     20 BORDER-TOP: #ece9d8 2px solid 
     21 } 
     22 .tableWigdet_headerCellOver { 
     23 BORDER-TOP: #ffc83c 2px solid 
     24 } 
     25 .tableWidget TBODY .tableWidget_dataRollOver { 
     26 BACKGROUND-COLOR: #fff 
     27 } 
     28 .tableWigdet_headerCellDown { 
     29 BORDER-RIGHT: #fff 1px solid; BORDER-TOP: #ffc83c 2px solid; BORDER-LEFT: #aca899 1px solid; BACKGROUND-COLOR: #dbd8c5 
     30 } 
     31 .tableWidget TD { 
     32 PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; MARGIN: 0px; PADDING-TOP: 2px; BORDER-BOTTOM: #eae9e1 1px solid 
     33 } 
     34 .tableWidget TBODY { 
     35 BACKGROUND-COLOR: #fff 
     36 } 
     37 .tableWidget { 
     38 FONT-SIZE: 12px; WIDTH: 400px; FONT-FAMILY: arial 
     39 } 
     40 DIV.widget_tableDiv { 
     41 BORDER-RIGHT: #aca899 1px solid; BORDER-TOP: #aca899 1px solid; OVERFLOW-Y: auto; BORDER-LEFT: #aca899 1px solid; WIDTH: 400px; BORDER-BOTTOM: #aca899 1px solid; HEIGHT: 200px 
     42 } 
     43 HTML > BODY DIV.widget_tableDiv { 
     44 OVERFLOW: hidden; WIDTH: 400px 
     45 } 
     46 .tableWidget THEAD { 
     47 POSITION: relative 
     48 } 
     49 .tableWidget THEAD TR { 
     50 BOTTOM: 0px; POSITION: relative; TOP: 0px 
     51 } 
     52 .tableWidget .scrollingContent { 
     53 OVERFLOW-Y: auto; WIDTH: 100% 
     54 } 
     55 </STYLE> 
     56 
     57 <SCRIPT type=text/javascript> 
     58 /* 
     59 (C) www.dhtmlgoodies.com, October 2005 
     60 
     61 This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website. 
     62 
     63 Terms of use: 
     64 You are free to use this script as long as the copyright message is kept intact. However, you may not 
     65 redistribute, sell or repost it without our permission. 
     66 
     67 Thank you! 
     68 
     69 www.dhtmlgoodies.com 
     70 Alf Magne Kalleland 
     71 
     72 */ 
     73 var tableWidget_tableCounter = 0
     74 var tableWidget_arraySort = new Array(); 
     75 var tableWidget_okToSort = true
     76 var activeColumn = new Array(); 
     77 var arrowImagePath = "images/"// Path to arrow images 
     78 
     79 function addEndCol(obj) 
     80 
     81 if(document.all)return
     82 var rows = obj.getElementsByTagName('TR'); 
     83 for(var no=0;no<rows.length;no++){ 
     84 var cell = rows[no].insertCell(-1); 
     85 cell.innerHTML = ' '
     86 cell.style.width = '13px'
     87 cell.width = '13'
     88 
     89 
     90 
     91 
     92 
     93 function highlightTableHeader() 
     94 
     95 this.className='tableWigdet_headerCellOver'
     96 if(document.all){ // I.E fix for "jumping" headings 
     97 var divObj = this.parentNode.parentNode.parentNode.parentNode; 
     98 this.parentNode.style.top = divObj.scrollTop + 'px'
     99 
    100 
    101 
    102 
    103 
    104 function deHighlightTableHeader() 
    105 
    106 this.className='tableWidget_headerCell'
    107 
    108 
    109 function mousedownTableHeader() 
    110 
    111 this.className='tableWigdet_headerCellDown'
    112 if(document.all){ // I.E fix for "jumping" headings 
    113 var divObj = this.parentNode.parentNode.parentNode.parentNode; 
    114 this.parentNode.style.top = divObj.scrollTop + 'px'
    115 
    116 
    117 
    118 function sortNumeric(a,b){ 
    119 
    120 = a.replace(/,/,'.'); 
    121 = b.replace(/,/,'.'); 
    122 = a.replace(/[^\d\-\.\/]/g,''); 
    123 = b.replace(/[^\d\-\.\/]/g,''); 
    124 if(a.indexOf('/')>=0)a = eval(a); 
    125 if(b.indexOf('/')>=0)b = eval(b); 
    126 return a/1 - b/1
    127 
    128 
    129 
    130 function sortString(a, b) { 
    131 
    132 if ( a.toUpperCase() < b.toUpperCase() ) return -1
    133 if ( a.toUpperCase() > b.toUpperCase() ) return 1
    134 return 0
    135 
    136 function cancelTableWidgetEvent() 
    137 
    138 return false
    139 
    140 
    141 function sortTable() 
    142 
    143 if(!tableWidget_okToSort)return
    144 tableWidget_okToSort = false
    145 /* Getting index of current column */ 
    146 var obj = this
    147 var indexThis = 0
    148 while(obj.previousSibling){ 
    149 obj = obj.previousSibling; 
    150 if(obj.tagName=='TD')indexThis++
    151 
    152 var images = this.getElementsByTagName('IMG'); 
    153 
    154 if(this.getAttribute('direction'|| this.direction){ 
    155 direction = this.getAttribute('direction'); 
    156 if(navigator.userAgent.indexOf('Opera')>=0)direction = this.direction; 
    157 if(direction=='ascending'){ 
    158 direction = 'descending'
    159 this.setAttribute('direction','descending'); 
    160 this.direction = 'descending'
    161 }else
    162 direction = 'ascending'
    163 this.setAttribute('direction','ascending'); 
    164 this.direction = 'ascending'
    165 
    166 }else
    167 direction = 'ascending'
    168 this.setAttribute('direction','ascending'); 
    169 this.direction = 'ascending'
    170 
    171 
    172 
    173 
    174 if(direction=='descending'){ 
    175 images[0].style.display='inline'
    176 images[0].style.visibility='visible'
    177 images[1].style.display='none'
    178 }else
    179 images[1].style.display='inline'
    180 images[1].style.visibility='visible'
    181 images[0].style.display='none'
    182 
    183 
    184 
    185 var tableObj = this.parentNode.parentNode.parentNode; 
    186 var tBody = tableObj.getElementsByTagName('TBODY')[0]; 
    187 
    188 var widgetIndex = tableObj.id.replace(/[^\d]/g,''); 
    189 var sortMethod = tableWidget_arraySort[widgetIndex][indexThis]; // N = numeric, S = String 
    190 if(activeColumn[widgetIndex] && activeColumn[widgetIndex]!=this){ 
    191 var images = activeColumn[widgetIndex].getElementsByTagName('IMG'); 
    192 images[0].style.display='none'
    193 images[1].style.display='inline'
    194 images[1].style.visibility = 'hidden'
    195 if(activeColumn[widgetIndex])activeColumn[widgetIndex].removeAttribute('direction'); 
    196 
    197 
    198 activeColumn[widgetIndex] = this
    199 
    200 var cellArray = new Array(); 
    201 var cellObjArray = new Array(); 
    202 for(var no=1;no<tableObj.rows.length;no++){ 
    203 var content= tableObj.rows[no].cells[indexThis].innerHTML+''
    204 cellArray.push(content); 
    205 cellObjArray.push(tableObj.rows[no].cells[indexThis]); 
    206 
    207 
    208 if(sortMethod=='N'){ 
    209 cellArray = cellArray.sort(sortNumeric); 
    210 }else
    211 cellArray = cellArray.sort(sortString); 
    212 
    213 
    214 if(direction=='descending'){ 
    215 for(var no=cellArray.length;no>=0;no--){ 
    216 for(var no2=0;no2<cellObjArray.length;no2++){ 
    217 if(cellObjArray[no2].innerHTML == cellArray[no] && !cellObjArray[no2].getAttribute('allreadySorted')){ 
    218 cellObjArray[no2].setAttribute('allreadySorted','1'); 
    219 tBody.appendChild(cellObjArray[no2].parentNode); 
    220 
    221 
    222 
    223 }else
    224 for(var no=0;no<cellArray.length;no++){ 
    225 for(var no2=0;no2<cellObjArray.length;no2++){ 
    226 if(cellObjArray[no2].innerHTML == cellArray[no] && !cellObjArray[no2].getAttribute('allreadySorted')){ 
    227 cellObjArray[no2].setAttribute('allreadySorted','1'); 
    228 tBody.appendChild(cellObjArray[no2].parentNode); 
    229 
    230 
    231 
    232 
    233 
    234 for(var no2=0;no2<cellObjArray.length;no2++){ 
    235 cellObjArray[no2].removeAttribute('allreadySorted'); 
    236 
    237 
    238 tableWidget_okToSort = true
    239 
    240 
    241 
    242 
    243 function initTableWidget(objId,width,height,sortArray) 
    244 
    245 width = width + ''
    246 height = height + ''
    247 var obj = document.getElementById(objId); 
    248 obj.parentNode.className='widget_tableDiv'
    249 if(navigator.userAgent.indexOf('MSIE')>=0){ 
    250 obj.parentNode.style.overflowY = 'auto'
    251 
    252 tableWidget_arraySort[tableWidget_tableCounter] = sortArray; 
    253 if(width.indexOf('%')>=0){ 
    254 obj.style.width = width; 
    255 obj.parentNode.style.width = width; 
    256 }else
    257 obj.style.width = width + 'px'
    258 obj.parentNode.style.width = width + 'px'
    259 
    260 
    261 if(height.indexOf('%')>=0){ 
    262 //obj.style.height = height; 
    263 obj.parentNode.style.height = height; 
    264 
    265 }else
    266 //obj.style.height = height + 'px'; 
    267 obj.parentNode.style.height = height + 'px'
    268 
    269 obj.id = 'tableWidget' + tableWidget_tableCounter; 
    270 addEndCol(obj); 
    271 
    272 obj.cellSpacing = 0
    273 obj.cellPadding = 0
    274 obj.className='tableWidget'
    275 var tHead = obj.getElementsByTagName('THEAD')[0]; 
    276 var cells = tHead.getElementsByTagName('TD'); 
    277 for(var no=0;no<cells.length;no++){ 
    278 cells[no].className = 'tableWidget_headerCell'
    279 cells[no].onselectstart = cancelTableWidgetEvent; 
    280 if(no==cells.length-1){ 
    281 cells[no].style.borderRight = '0px'
    282 
    283 if(sortArray[no]){ 
    284 cells[no].onmouseover = highlightTableHeader; 
    285 cells[no].onmouseout = deHighlightTableHeader; 
    286 cells[no].onmousedown = mousedownTableHeader; 
    287 cells[no].onmouseup = highlightTableHeader; 
    288 cells[no].onclick = sortTable; 
    289 
    290 var img = document.createElement('IMG'); 
    291 img.src = arrowImagePath + 'arrow_up.gif'
    292 cells[no].appendChild(img); 
    293 img.style.visibility = 'hidden'
    294 
    295 var img = document.createElement('IMG'); 
    296 img.src = arrowImagePath + 'arrow_down.gif'
    297 cells[no].appendChild(img); 
    298 img.style.display = 'none'
    299 
    300 
    301 }else
    302 cells[no].style.cursor = 'default'
    303 
    304 
    305 
    306 
    307 var tBody = obj.getElementsByTagName('TBODY')[0]; 
    308 if(document.all && navigator.userAgent.indexOf('Opera')<0){ 
    309 tBody.className='scrollingContent'
    310 tBody.style.display='block'
    311 }else
    312 tBody.className='scrollingContent'
    313 
    314 if(tBody.offsetHeight>(tBody.parentNode.parentNode.offsetHeight - 50)) { 
    315 tBody.style.height = (obj.parentNode.clientHeight-tHead.offsetHeight) + 'px'
    316 }else
    317 tBody.style.overflow='hidden'
    318 
    319 if(navigator.userAgent.indexOf('Opera')>=0){ 
    320 obj.parentNode.style.overflow = 'auto'
    321 
    322 
    323 
    324 for(var no=1;no<obj.rows.length;no++){ 
    325 obj.rows[no].onmouseover = highlightDataRow; 
    326 obj.rows[no].onmouseout = deHighlightDataRow; 
    327 for(var no2=0;no2<sortArray.length;no2++){ /* Right align numeric cells */ 
    328 if(sortArray[no2] && sortArray[no2]=='N')obj.rows[no].cells[no2].style.textAlign='right'
    329 
    330 
    331 for(var no2=0;no2<sortArray.length;no2++){ /* Right align numeric cells */ 
    332 if(sortArray[no2] && sortArray[no2]=='N')obj.rows[0].cells[no2].style.textAlign='right'
    333 
    334 
    335 tableWidget_tableCounter++
    336 
    337 
    338 
    339 function highlightDataRow() 
    340 
    341 if(navigator.userAgent.indexOf('Opera')>=0)return
    342 this.className='tableWidget_dataRollOver'
    343 if(document.all){ // I.E fix for "jumping" headings 
    344 var divObj = this.parentNode.parentNode.parentNode; 
    345 var tHead = divObj.getElementsByTagName('TR')[0]; 
    346 tHead.style.top = divObj.scrollTop + 'px'
    347 
    348 
    349 
    350 
    351 function deHighlightDataRow() 
    352 
    353 if(navigator.userAgent.indexOf('Opera')>=0)return
    354 this.className=null
    355 if(document.all){ // I.E fix for "jumping" headings 
    356 var divObj = this.parentNode.parentNode.parentNode; 
    357 var tHead = divObj.getElementsByTagName('TR')[0]; 
    358 tHead.style.top = divObj.scrollTop + 'px'
    359 
    360 
    361 
    362 </SCRIPT> 
    363 
    364 <META content="MSHTML 6.00.5730.13" name=GENERATOR></HEAD> 
    365 <BODY> 
    366 <DIV class=widget_tableDiv> 
    367 <TABLE id=myTable> 
    368 <THEAD> 
    369 <TR> 
    370 <TD>Name</TD> 
    371 <TD>Age</TD> 
    372 <TD>Position</TD> 
    373 <TD>Income</TD> 
    374 <TD>Gender</TD></TR></THEAD> 
    375 <TBODY class=scrollingContent> 
    376 <TR> 
    377 <TD>John</TD> 
    378 <TD>37</TD> 
    379 <TD>Managing director</TD> 
    380 <TD>90.000</TD> 
    381 <TD>Male</TD></TR> 
    382 <TR> 
    383 <TD>Susan</TD> 
    384 <TD>34</TD> 
    385 <TD>Partner</TD> 
    386 <TD>90.000</TD> 
    387 <TD>Female</TD></TR> 
    388 <TR> 
    389 <TD>David</TD> 
    390 <TD>29</TD> 
    391 <TD>Head of production</TD> 
    392 <TD>70.000</TD> 
    393 <TD>Male</TD></TR> 
    394 <TR> 
    395 <TD>Laura</TD> 
    396 <TD>29</TD> 
    397 <TD>Head of marketing</TD> 
    398 <TD>70.000</TD> 
    399 <TD>Female</TD></TR> 
    400 <TR> 
    401 <TD>Kate</TD> 
    402 <TD>18</TD> 
    403 <TD>Marketing</TD> 
    404 <TD>50.000</TD> 
    405 <TD>Female</TD></TR> 
    406 <TR> 
    407 <TD>Mona</TD> 
    408 <TD>21</TD> 
    409 <TD>Marketing</TD> 
    410 <TD>53.000</TD> 
    411 <TD>Female</TD></TR> 
    412 <TR> 
    413 <TD>Mike</TD> 
    414 <TD>21</TD> 
    415 <TD>Marketing</TD> 
    416 <TD>53.000</TD> 
    417 <TD>Male</TD></TR> 
    418 <TR> 
    419 <TD>Mark</TD> 
    420 <TD>25</TD> 
    421 <TD>Production</TD> 
    422 <TD>52.000</TD> 
    423 <TD>Male</TD></TR> 
    424 <TR> 
    425 <TD>Peter</TD> 
    426 <TD>33</TD> 
    427 <TD>Production</TD> 
    428 <TD>55.000</TD> 
    429 <TD>Male</TD></TR> 
    430 <TR> 
    431 <TD>Jennifer</TD> 
    432 <TD>24</TD> 
    433 <TD>Production</TD> 
    434 <TD>49.000</TD> 
    435 <TD>Female</TD></TR> 
    436 <TR> 
    437 <TD>David</TD> 
    438 <TD>25</TD> 
    439 <TD>Photography</TD> 
    440 <TD>51.000</TD> 
    441 <TD>Male</TD></TR> 
    442 <TR> 
    443 <TD>Anna</TD> 
    444 <TD>42</TD> 
    445 <TD>Head of photography</TD> 
    446 <TD>56.000</TD> 
    447 <TD>Female</TD></TR> 
    448 <TR> 
    449 <TD>Rita</TD> 
    450 <TD>30</TD> 
    451 <TD>Photography</TD> 
    452 <TD>54.000</TD> 
    453 <TD>Female</TD></TR> 
    454 <TR> 
    455 <TD>Magnus</TD> 
    456 <TD>25</TD> 
    457 <TD>Freelancer</TD> 
    458 <TD>65.000</TD> 
    459 <TD>Male</TD></TR> 
    460 <TR> 
    461 <TD>Johnny</TD> 
    462 <TD>29</TD> 
    463 <TD>Freelancer</TD> 
    464 <TD>63.000</TD> 
    465 <TD>Male</TD></TR></TBODY></TABLE></DIV> 
    466 <SCRIPT type=text/javascript> 
    467 initTableWidget('myTable',500,250,Array('S','N',false,'N','S')); 
    468 </SCRIPT> 
    469 <BR><BR> 
    470 </BODY></HTML> 
    471 
    472 
    473 原文地址:http://www.corange.cn/archives/2010/04/3600.html 
    474 
  • 相关阅读:
    Linux设备驱动
    Android:注册登录
    Android:ZoomControls控件
    每日英语:Some Chinese Students Stay Home to Get Ahead
    每日英语:March Remembers King's Dream
    每日英语:Hong Kong Lifestyle Strains City's Resources
    每日英语:Prosecutors Wrap Up Case Against Bo
    每日英语:He Diets, She Diets: More Weight-Loss Plans Target Men
    每日英语:First Offer: Take It Or Keep Waiting?
    每日英语:Does Evolution Want Us To Be Unhappy?
  • 原文地址:https://www.cnblogs.com/zerogo/p/1718209.html
Copyright © 2011-2022 走看看