📄 sorttable.js
字号:
// This function is used to setup sorting on a table's headersfunction initTable(id, colTypes) { var table = document.getElementById(id); // error handling if (isUndefined(table)) { alert("A table with id=\""+id+"\" does not exist."); } var thead = table.getElementsByTagName("thead")[0]; if (isUndefined(thead)) { alert("A <thead> doesn't exist on table with id=\""+id+"\"."); } var cols = thead.getElementsByTagName("th"); // loop through each header and attach an onclick event for (i=0; i < cols.length; i++) { if (!isUndefined(colTypes) && colTypes[i] != null) { cols[i].onclick = function() {sortTable(this,colTypes[i])}; } else { cols[i].onclick = function() {sortTable(this)}; } cols[i].className="sortable"; // set sort indicator on first column if (i==0) { setIndicator(cols[i], true); } }}var sortedOn = 0;var lastSorted = "";function sortTable(e, type) { // figure out which column this is in the table, and the table table = e.parentNode.parentNode.parentNode; sortOn = e.cellIndex; //var table = document.getElementById(tableId); var tbody = table.getElementsByTagName('tbody')[0]; var rows = tbody.getElementsByTagName('tr'); var rowArray = new Array(); for (var i=0, length=rows.length; i<length; i++) { rowArray[i] = rows[i].cloneNode(true); } if (sortOn == sortedOn) { rowArray.reverse(); lastSorted = (lastSorted == "asc" || lastSorted == "") ? "desc" : "asc"; } else { lastSorted = "asc"; sortedOn = sortOn; try { if (type == "number") { rowArray.sort(rowCompareNumbers); } else if (type == "input") { rowArray.sort(rowCompareInputs); } else if (type == "numberInput") { rowArray.sort(rowCompareNumberInputs); } else if (type == "select") { rowArray.sort(rowCompareSelects); } else if (type == "dollar") { rowArray.sort(rowCompareDollars); } else { rowArray.sort(rowCompare); } } catch (err) { alert("An error has occurred!\nName: " + err.name + "\nMessage: " + err.message); } } var newTbody = document.createElement('tbody'); for (var i=0, length=rowArray.length; i<length; i++) { // set the appropriate className for alternating rows if (i % 2 == 0) { rowArray[i].className = "tableRowOdd"; } else { rowArray[i].className = "tableRowEven"; } newTbody.appendChild(rowArray[i]); } table.replaceChild(newTbody, tbody); // get all the cells in the thead and set the class on the sorted column var thead = table.getElementsByTagName('thead')[0]; var cells = thead.getElementsByTagName('th'); for (var i=0; i < cells.length; i++) { cells[i].className = "sortable"; var spans = cells[i].getElementsByTagName('img'); for (var j=0; j < spans.length; j++) { cells[i].removeChild(spans[j]); } } setIndicator(e);}function rowCompare(a, b) { var aVal = a.getElementsByTagName('td')[sortedOn].firstChild.nodeValue; var bVal = b.getElementsByTagName('td')[sortedOn].firstChild.nodeValue; return (aVal == bVal ? 0 : (aVal > bVal ? 1 : -1));}function rowCompareInputs(a, b) { var aVal = a.getElementsByTagName('td')[sortedOn].getElementsByTagName("input")[0].value; var bVal = b.getElementsByTagName('td')[sortedOn].getElementsByTagName("input")[0].value; return (aVal == bVal ? 0 : (aVal > bVal ? 1 : -1));}function rowCompareNumbers(a, b) { var aVal = parseInt(a.getElementsByTagName('td')[sortedOn].firstChild.nodeValue); var bVal = parseInt(b.getElementsByTagName('td')[sortedOn].firstChild.nodeValue); return (aVal - bVal);}function rowCompareNumberInputs(a, b) { var aVal = parseInt(a.getElementsByTagName('td')[sortedOn].getElementsByTagName("input")[0].value); var bVal = parseInt(b.getElementsByTagName('td')[sortedOn].getElementsByTagName("input")[0].value); return (aVal - bVal);}function rowCompareSelects(a, b) { var aSelect = a.getElementsByTagName('td')[sortedOn].getElementsByTagName("select")[0]; var bSelect = b.getElementsByTagName('td')[sortedOn].getElementsByTagName("select")[0]; var aVal = aSelect.options[aSelect.selectedIndex].text; var bVal = bSelect.options[bSelect.selectedIndex].text; return (aVal == bVal ? 0 : (aVal > bVal ? 1 : -1));}function rowCompareDollars(a, b) { var aVal = parseFloat(a.getElementsByTagName('td')[sortedOn].firstChild.nodeValue.substr(1)); var bVal = parseFloat(b.getElementsByTagName('td')[sortedOn].firstChild.nodeValue.substr(1)); return (aVal - bVal);}function setIndicator(e, pageLoad) { if (pageLoad) { lastSorted = "asc"; } e.className = "sorted"; var indicator = document.createElement("img"); indicator.setAttribute("src", "images/"+lastSorted+".gif"); indicator.setAttribute("width", "9"); indicator.setAttribute("height", "10"); indicator.setAttribute("alt", (lastSorted == "asc") ? "Ascending" : "Descending"); indicator.className = "sortIndicator"; e.appendChild(indicator);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -