Posted in Javascript onJuly 25, 2012
首先创建html页面为sort.html ,并把下面的内容复制进去
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <style type="text/css"> .desc span{ display:none;} .asc em{ display:none;} </style> <script type="text/javascript" src="sort.js"></script> </head> <body> <table width="200" border="1" cellpadding="0" cellspacing="0" sort="true" id="mytab"> <thead style="cursor:pointer"> <tr> <td class="desc">ID<span>|</span><em>-</em></td> <td class="desc">name<span>|</span><em>-</em></td> </tr> </thead> <tbody> <tr> <td>1</td> <td>开心</td> </tr> <tr> <td>3</td> <td>开饭</td> </tr> <tr> <td>5</td> <td>开放</td> </tr> </tbody> </table> <table width="200" border="1" sort="true" id="mytabs"> <thead style="cursor:pointer"> <tr> <td class="desc">ID<span>|</span><em>-</em></td> <td class="desc">name<span>|</span><em>-</em></td> </tr> </thead> <tbody> <tr> <td>1</td> <td>开心</td> </tr> <tr> <td>3</td> <td>开饭</td> </tr> <tr> <td>5</td> <td>开放</td> </tr> </tbody> </table> </body> </html>
新建脚本页 sort.js
/* 表格排序功能 事件:2012 7 24 DOM 节点 如果表格需要排序 在表格属性中添加 sort="true" 并且 id是唯一并且是必须的 此js文件直接引入即可 因为制作的仓储 没有注释 <table width="200" border="1" sort="true" id="mytab"> <thead style="cursor:pointer"> <tr> <td class="desc">ID<span>|</span><em>-</em></td> <td class="desc">name<span>|</span><em>-</em></td> </tr> </thead> <tbody> <tr> <td>1</td> <td>开心</td> </tr> <tr> <td>3</td> <td>开饭</td> </tr> <tr> <td>5</td> <td>开放</td> </tr> </tbody> </table> */ var Core = (function(window){ return { init: function(){ Core.getTableById(); Core.setHeadClick(); }, I: function(id){ return document.getElementById(id); }, N: function(name){ return document.getElementsByTagName(name); }, config: { arr:[] }, getTableById: function(){ var table_arr=Core.N("table"); for(var i = 0; i < table_arr.length; i++){ if(table_arr[i].getAttribute("sort")){ Core.config.arr.push(table_arr[i].getAttribute("id")); } } //alert(Core.config.arr) }, setHeadClick: function(){ var arr = Core.config.arr; if(!arr.length) return false; for(var j = 0 ; j< arr.length;j++){ var thead = Core.I(arr[j]).getElementsByTagName("thead")[0].getElementsByTagName("td"); for(var i = 0; i<thead.length;i++){ if(thead[i].attachEvent){ thead[i].attachEvent("onclick",Core.sortList) }else{ thead[i].addEventListener("click",Core.sortList,false) } //if(i==0){ // thead[i].click(); // } } } }, sortList: function(e){ var index=0,arr=[],sort="asc",table=null; if(e.srcElement){ index=e.srcElement.cellIndex; sort=e.srcElement.getAttribute("sort"); e.srcElement.className=sort == "asc" ? "desc" : "asc"; e.srcElement.setAttribute("sort", sort == "asc" ? "desc" : "asc"); table = Core.getTableId(e.srcElement) }else{ index=e.currentTarget.cellIndex; sort=e.currentTarget.getAttribute("sort"); e.currentTarget.className=sort == "asc" ? "desc" : "asc"; e.currentTarget.setAttribute("sort", sort == "asc" ? "desc" : "asc"); table = Core.getTableId(e.currentTarget) } Core.getList(table,index,arr); Core.updateList(table,sort,arr); }, getTableId: function(p){ for(var i=0,n=p;n=n.parentNode;i++){ if(i>100) break; if(n.nodeName=="TABLE"){ //alert(n.nodeName/*n.getAttribute("id")*/) return n; } } }, getList: function (table,index,arr){ var table = table.getElementsByTagName("tbody")[0]; for(var i = 0; i< table.rows.length; i++){ var item = table.rows[i]; for(var j = 0; j< item.cells.length;j++){ var jtem = item.cells[index]; if(jtem.innerHTML){ //alert(jtem.innerHTML) arr[i]=jtem.innerHTML; } break; } } }, updateList: function (table,sort,arr){ var table = table.getElementsByTagName("tbody")[0]; for(var i = 0; i< arr.length;i++){ for(var j = i+1;j< arr.length;j++){ if(sort=="asc"){ if(arr[i] > arr[j]){ var rwos=table.rows[i].cloneNode(true); table.replaceChild(table.rows[j],table.rows[i]); if(j+1==arr.length){ //table.insertBefore(rwos,null); table.appendChild(rwos) }else{ table.insertBefore(rwos,table.rows[j]); } var tim= arr[i]; arr.splice(i,1,arr[j]); arr.splice(j,1,tim); } }else{ if(arr[i] < arr[j]){ var rwos=table.rows[i].cloneNode(true); table.replaceChild(table.rows[j],table.rows[i]); if(j+1==arr.length){ //table.insertBefore(rwos,null); table.appendChild(rwos) }else{ table.insertBefore(rwos,table.rows[j]); } var tim= arr[i]; arr.splice(i,1,arr[j]); arr.splice(j,1,tim); } } } } } }; })(window); window.onload=Core.init;
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@