sortTable.js
上传用户:huijianzhu
上传日期:2009-11-25
资源大小:9825k
文件大小:5k
源码类别:

电子政务应用

开发平台:

Java

  1. // This function is used to setup sorting on a table's headers
  2. function initTable(id, colTypes) {
  3.     var table = document.getElementById(id);
  4.     // error handling
  5.     if (isUndefined(table)) {
  6.         alert("A table with id=""+id+"" does not exist.");
  7.     }
  8.     var thead = table.getElementsByTagName("thead")[0];
  9.     if (isUndefined(thead)) {
  10.         alert("A <thead> doesn't exist on table with id=""+id+"".");
  11.     }
  12.     var cols = thead.getElementsByTagName("th");
  13.     // loop through each header and attach an onclick event
  14.     for (i=0; i < cols.length; i++) {
  15.         if (!isUndefined(colTypes) && colTypes[i] != null) {
  16.             cols[i].onclick = function() {sortTable(this,colTypes[i])};
  17.         } else {
  18.             cols[i].onclick = function() {sortTable(this)};
  19.         }
  20.         cols[i].className="sortable";
  21.         // set sort indicator on first column
  22.         if (i==0) {
  23.            setIndicator(cols[i], true);
  24.         }
  25.     }
  26. }
  27. var sortedOn = 0;
  28. var lastSorted = "";
  29. function sortTable(e, type) {
  30.     // figure out which column this is in the table, and the table
  31.     table = e.parentNode.parentNode.parentNode;
  32.     sortOn = e.cellIndex;
  33.     
  34.     //var table = document.getElementById(tableId);
  35.     var tbody = table.getElementsByTagName('tbody')[0];
  36.     var rows = tbody.getElementsByTagName('tr');
  37.     var rowArray = new Array();
  38.     for (var i=0, length=rows.length; i<length; i++) {
  39.         rowArray[i] = rows[i].cloneNode(true);
  40.     }
  41.     
  42.     if (sortOn == sortedOn) { 
  43.         rowArray.reverse(); 
  44.         lastSorted = (lastSorted == "asc" || lastSorted == "") ? "desc" : "asc";
  45.     } else {
  46.         lastSorted = "asc";
  47.         sortedOn = sortOn;
  48.         try {
  49.             if (type == "number") {
  50.                 rowArray.sort(rowCompareNumbers);
  51.             } else if (type == "input") {
  52.                 rowArray.sort(rowCompareInputs);
  53.             } else if (type == "numberInput") {
  54.                 rowArray.sort(rowCompareNumberInputs);
  55.             } else if (type == "select") {
  56.                 rowArray.sort(rowCompareSelects);
  57.             } else if (type == "dollar") {
  58.                 rowArray.sort(rowCompareDollars);
  59.             } else {
  60.                 rowArray.sort(rowCompare);
  61.             } 
  62.         } catch (err) {
  63.             alert("An error has occurred!nName: " + err.name + "nMessage: " + err.message);
  64.         }
  65.     }
  66.           
  67.     var newTbody = document.createElement('tbody');
  68.     for (var i=0, length=rowArray.length; i<length; i++) {
  69.         // set the appropriate className for alternating rows
  70.         if (i % 2 == 0) {
  71.             rowArray[i].className = "tableRowOdd";
  72.         } else {
  73.             rowArray[i].className = "tableRowEven";
  74.         }
  75.         newTbody.appendChild(rowArray[i]);
  76.     }
  77.     
  78.     table.replaceChild(newTbody, tbody);
  79.     
  80.     // get all the cells in the thead and set the class on the sorted column
  81.     var thead = table.getElementsByTagName('thead')[0];
  82.     var cells = thead.getElementsByTagName('th');
  83.     for (var i=0; i < cells.length; i++) {
  84.         cells[i].className = "sortable";    
  85.         var spans = cells[i].getElementsByTagName('img');
  86.         for (var j=0; j < spans.length; j++) {
  87.             cells[i].removeChild(spans[j]);
  88.         }
  89.     }
  90.     setIndicator(e);
  91. }
  92. function rowCompare(a, b) {
  93.     var aVal = a.getElementsByTagName('td')[sortedOn].firstChild.nodeValue;
  94.     var bVal = b.getElementsByTagName('td')[sortedOn].firstChild.nodeValue;
  95.     return (aVal == bVal ? 0 : (aVal > bVal ? 1 : -1));
  96. }
  97. function rowCompareInputs(a, b) {
  98.     var aVal = a.getElementsByTagName('td')[sortedOn].getElementsByTagName("input")[0].value;
  99.     var bVal = b.getElementsByTagName('td')[sortedOn].getElementsByTagName("input")[0].value;
  100.     return (aVal == bVal ? 0 : (aVal > bVal ? 1 : -1));
  101. }
  102. function rowCompareNumbers(a, b) {
  103.     var aVal = parseInt(a.getElementsByTagName('td')[sortedOn].firstChild.nodeValue);
  104.     var bVal = parseInt(b.getElementsByTagName('td')[sortedOn].firstChild.nodeValue);
  105.     return (aVal - bVal);
  106. }
  107. function rowCompareNumberInputs(a, b) {
  108.     var aVal = parseInt(a.getElementsByTagName('td')[sortedOn].getElementsByTagName("input")[0].value);
  109.     var bVal = parseInt(b.getElementsByTagName('td')[sortedOn].getElementsByTagName("input")[0].value);
  110.     return (aVal - bVal);
  111. }
  112. function rowCompareSelects(a, b) {
  113.     var aSelect = a.getElementsByTagName('td')[sortedOn].getElementsByTagName("select")[0];
  114.     var bSelect = b.getElementsByTagName('td')[sortedOn].getElementsByTagName("select")[0];
  115.     var aVal = aSelect.options[aSelect.selectedIndex].text;
  116.     var bVal = bSelect.options[bSelect.selectedIndex].text;
  117.     return (aVal == bVal ? 0 : (aVal > bVal ? 1 : -1));
  118. }
  119. function rowCompareDollars(a, b) {
  120.     var aVal = parseFloat(a.getElementsByTagName('td')[sortedOn].firstChild.nodeValue.substr(1));
  121.     var bVal = parseFloat(b.getElementsByTagName('td')[sortedOn].firstChild.nodeValue.substr(1));
  122.     return (aVal - bVal);
  123. }
  124. function setIndicator(e, pageLoad) {
  125.     if (pageLoad) {
  126.         lastSorted = "asc";
  127.     }
  128.     e.className = "sorted";
  129.     var indicator = document.createElement("img");
  130.     indicator.setAttribute("src", "images/"+lastSorted+".gif");
  131.     indicator.setAttribute("width", "9");
  132.     indicator.setAttribute("height", "10");
  133.     indicator.setAttribute("alt", (lastSorted == "asc") ? "Ascending" : "Descending");
  134.     indicator.className = "sortIndicator";
  135.     e.appendChild(indicator);
  136. }