Wrox Home  
Search P2P Archive for: Go

  Return to Index  

asptoday_discuss thread: Sorting Table Data: Pro. Javascript 2nd Edition, Chapter 17


Message #1 by "WooGor" <zhang5gor@y...> on Thu, 11 Jul 2002 16:47:46
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
	    }
         }
      }
   }
}



  Return to Index