这几天,编写了一个根据传入数据对象,生成table列表的javascript方法,其实会涉及到对table的排序,在此记录一下实现过程。
首先,将整个table分为表头,表体、表尾三个部份,其中表头为列表的字段名,表体为这个table的实际内容数据,然后表尾为一些分页的标志(上下页等)。同时把这三个部份,分别存往放在三个不同的javascript变量中。当然这些javascript变量均为对象,分别以table的id为索引搜索各自的table表头、表体、表尾内容。
其次,将表体中的每一行即:tr存放在一个变量数组T中。 然后,将待排序的字段列数据也存放在一个数组A中,同时生成一个对应的键值对象B,键为待排序字段的每一个cell的内容,值为cell对应行的序号。
最后,将分别用三个数组统计数组A中的内容是数值或字符还是汉字,依次存储的数组为numArr(数值)、abcArr(字符)、worArr(汉字),再分别利用javascript的方法sort对数值用numArr = numArr.sort(function(a,b){return a-b;});对字符用abcArr= numArr.sort(); 对汉字用worArr= worArr.sort(function(a,b){return a.localeCompare(b);});(拼音顺序)进行排序,分别排序完成后,再将这三个数组合并到A数组中,在重新生成整个table,此时table的表头,和表尾我的照搬过来,只是表体的内容,我们需要遍历数组T生成,遍历的顺序为排序好的A数组中值对应在B对象中的序号,根据序号再去T数组中一个一个的取出tr字符串进行表体的生成。 至此,我们可以用表头+表体(已排序)+表尾的形式将table重绘,实现排序。