asptoday_discuss thread: Sorting Table Data: Pro. Javascript 2nd Edition, Chapter 17
Problem: Page 657 "Sorting Table Data", Chapter 17.
When change 6 (or any of them) on Column A to 11, then click on Column A,
it shows the order as: 1 11 3 5.2 5.4 9. It seemed that sorting numerical
order does not work properly.
Also, it only works one click on ASC order, not two clicks on either ASC
or DESC.
Can anyone help?
Thank you!
If you need this javascript, please download it from www.wrox.com for
Professional Javascript 2nd Edition. Following is the javascript code
list for you to review.
// TableSorter.js
function TableSorter()
{
//Private Methods
var compare = function(a, b) {
if (a.toLowerCase() < b.toLowerCase())
return -1
if (a.toLowerCase() > b.toLowerCase())
return 1
return 0
}
var getTableBodies = function(tableEl)
{
var parentEl = tableEl.parentNode
while (parentEl.nodeName != "TABLE")
{
parentEl = parentEl.parentNode
if (parentEl.nodeName == "BODY") return null
}
return parentEl.tBodies
}
//Public Methods
this.sortColumn = function(clickedCol)
{
var tableBodyEls = getTableBodies(clickedCol)
if(tableBodyEls && tableBodyEls[0].rows.length <= 1) return
var columnData = new Array(tableBodyEls[0].rows.length)
for (var i = 0; i < tableBodyEls[0].rows.length; i++)
{
columnData[i] = tableBodyEls[0].rows[i].cells
[clickedCol.cellIndex].firstChild.nodeValue
}
// columnData.sort(compare)
columnData.sort()
for (var i = 0; i < columnData.length; i++)
{
for (var j = 0; j < tableBodyEls[0].rows.length; j++)
{
if (columnData[i] == tableBodyEls[0].rows[j].cells
[clickedCol.cellIndex].firstChild.nodeValue)
{
tableBodyEls[0].appendChild(tableBodyEls[0].rows[j])
break
}
}
}
}
}