表排序[JavaScript高级程序设计]

var tableSort = new Object();
           
            //类型转换函数
            function convert(sValue, sDataType)
            {
                switch(sDataType)
                {
                    case "int":
                         return parseInt(sValue);
                    case "float":
                         return parseFloat(sValue);
                    case "date":
                         return new Date(Date.parse(sValue));
                    default:
                         return sValue.toString();
                }
            }
           
            /*
             * 比较函数生成器
             * 函数其实和JavaScript中其他数据类型一样,也可以作为参数传递或者作为函数的返回值
             * 接受两个参数:
             * iCol:列索引
             * sDataType:该列中数据的类型
             */
            function generateCompareTRs(iCol,sDataType)
            {
                return function compareTRs(oTR1,oTR2)
                       {
                          var vValue1 = convert(oTR1.cells[iCol].firstChild.nodeValue,sDataType);
                          var vValue2 = convert(oTR2.cells[iCol].firstChild.nodeValue,sDataType);
                         
                          //Date对象的valueOf()以及小于和大于号可以比较它们的毫秒表示形式
                          if(vValue1 < vValue2)
                             return -1;
                          else if(vValue1 > vValue2)
                             return 1;
                          else
                             return 0;
                       };
            }
           
            tableSort.sortTable = function(sTableID,iCol,sDataType)
            {
                var oTable = document.getElementById(sTableID);
                var oTBody = oTable.tBodies[0];
                var colDataRows = oTBody.rows;
               
                var aTRs = new Array;
                for(var i=0; i<colDataRows.length; i++)
                   aTRs[i] = colDataRows[i];
               
                if(oTable.sortCol == iCol)
                    //逆序
                    aTRs.reverse();                   
                else
                    aTRs.sort(generateCompareTRs(iCol,sDataType));

               
                var oFragment = document.createDocumentFragment();
                for(var i=0; i<aTRs.length; i++)
                   oFragment.appendChild(aTRs[i]);
                  
                oTBody.appendChild(oFragment);
                /*
                 * 在表格上创建expando特性
                 * expando特性是运行时为对象添加的额外的JavaScript特性
                 * 这里的expando特性称为sortCol,用来保存最后进行排序的列索引
                 */
                oTable.sortCol = iCol;
            }


你可能感兴趣的:(JavaScript)