手撕报表的扯淡经历

   手撕报表,是我工作以来,改的最恶心的一次需求,本来早该总结记录一下的,最近一直在改BUG,今天在这简单记录下其中的小点,作为自己工作中的经验积累。
   主要用jquery和easyui以及核心标签重写了输赢报表的页面,其实感觉是贼鸡儿操蛋的,难度一般,主要是麻烦,涉及到多个table的拼接和替换,还有不同点击事件的传值问题。在这次手撕报表中用到了前台js分页,并不是在后台分页,这一块还有待提高,如果表中数据量不多这个方法还适用,一旦数据量大了之后,在查询的时候就会很慢,导致用户体验并不好,所以说前台js分页适用于数据量不大的页面,这里粘一下前台js分页的方法:
    js代码:
    //前端页面分页
     //pno--页数
    //psize--每页显示记录数
     //分页部分是从真实数据行开始,因而存在加减某个常数,以确定真正的记录数
     //纯js分页实质是数据行全部加载,通过是否显示属性完成分页功能
    var selected = 10;
    function goPage(pno,nums){
       //这里的" tbodyData "是表格的id
       var itable = document.getElementById( "tbodyData" );
       var num = itable.rows.length; //表格所有行数(所有记录数)
       var totalPage = 0; //总页数
       var pageSize = nums; //每页显示行数
       //总共分几页
       if (( num/pageSize) > parseInt(num/p ageSize)){
           totalPage=parseInt(num/pageSize)+1;
       } else {
           totalPage=parseInt(num/pageSize);
       }
       var currentPage = pno; //当前页数
       var startRow = (currentPage - 1) * pageSize+1; //开始显示的行
       var endRow = currentPage * pageSize; //结束显示的行
       endRow = (endRow > num)? num : endRow;
       //遍历显示数据实现分页
       for ( var i=1;i<(num+1);i++){
           var irow = itable.rows[i-1];
           if (i>=startRow && i<=endRow){
               irow.style.display = "table-row" ;
           } else {
               irow.style.display = "none" ;
           }
       }
       var pageEnd = document.getElementById( "pageEnd" );
       var selStr = "" ;
       if (nums != 10){
          switch (parseInt(nums)) {
              case 20:
                selStr = "<select id='nums' style='width: 50px;padding:3px 6px;'onchange=\"changeSize()\">" +
                 "<option value='10'>10</option><option selected='selected' value='20'>20</option><option value='30'>30</option></select>" ;;
                 break ;
   
              case 30:
                selStr = "<select id='nums' style='width: 50px;padding:3px 6px;'onchange=\"changeSize()\">" +
                 "<option value='10'>10</option><option value='20'>20</option><option  selected='selected' value='30'>30</option></select>" ;
                 break ;   
              default :
                 break ;
             }
       } else {
         selStr = "<select id='nums' style='width: 50px;padding:3px 6px;'onchange=\"changeSize()\">" +
          "<option selected='selected' value='10'>10</option><option value='20'>20</option><option value='30'>30</option></select>" ;
       }
       var tempStr = "<span>共" +totalPage+ "页&nbsp;每页展示条数:</span>&nbsp;&nbsp;" +selStr;
        tempStr += "&nbsp;&nbsp;<span>当前页:" + pno + "</span>" ;      
        if (currentPage>1){
           tempStr += "&nbsp;&nbsp;<a class='easyui-linkbutton' href=\"#\" onClick=\"goPage(" +1+ "," +selected+ ")\">首页</a>" ;
           tempStr += "&nbsp;&nbsp;<a class='easyui-linkbutton' href=\"#\" onClick=\"goPage(" +(currentPage-1)+ "," +selected+ ")\">上一页</a>"
       }    
       if (currentPage<totalPage){
           tempStr += "&nbsp;&nbsp;<a class='easyui-linkbutton' href=\"#\" onClick=\"goPage(" +(currentPage+1)+ "," +selected+ ")\">下一页</a>" ;
           tempStr += "&nbsp;&nbsp;<a class='easyui-linkbutton' href=\"#\" onClick=\"goPage(" +(totalPage)+ "," +selected+ ")\">尾页</a>" ;
       }
       document.getElementById( "barcon" ).innerHTML = tempStr;
   }
    //监听展示条数事件
   function changeSize(){
          selected = $( '#nums option:selected' ).val();
          goPage(1,selected)
   };
    
  jsp页面代码:
    < div id = "barcon" name = "barcon" class = "bootom-bar" ></ div >
然后在页面一加载的时候调用一下分页的函数
    $(function(){
            //分页
            goPage(1,10);
            //这里的1和10是分页函数的初值,当前第一页,每页展示10条数据
    });
    在拼接不同table的时候,我这里并没有直接吧整个table移除掉,我选择只是替换table中的tbody和thead、tfoot,这个要根据具体需要展示的数据来拼接替换,在拼接table的时候用到了
     $.each(obj, function (key,item){});
   这个循环函数,然后要获取list中的某一元素的某一个值就可以直接item.name来获取,最后拼接完语句,用
 $( "#tfootData"① ).append(str②);  
    来替换掉以前的内容,其中①是需要替换的位置的id,②是需要替换的语句。如果你这里用了前台js分页,需要在替换后调用一下分页的函数。

猜你喜欢

转载自blog.csdn.net/shiyus1314/article/details/79384583
今日推荐