好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

【jquery模仿net控件】简单分页控件1.0,附上gridview使用测试

【jquery模仿net控件】简单分页控件1.0,附上gridview使用测试

前言

最近项目需求需要用到jquery的分页功能,所以就自己模仿着其它地方的写了一个,现在配合着原来写的gridview一起使用看看效果。

我们项目有个地方有点痛苦,他不能返回数据的总记录数,这个bug不修复我这边都只能动态附初始值,另外首页尾页等因为刚刚写起皆暂时未实现,

等后面点调整后,有必要便一起发出来。

截图

分页代码使用示例

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://HdhCmsTestw3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://HdhCmsTestw3.org/1999/xhtml">
<head>
    <title></title>
    <link href="css/pagination.css" rel="stylesheet" type="text/css" />
    <script src="js/jquery-1.7.1.min.js" type="text/javascript"></script>
    <script src="js/Pagination.js" type="text/javascript"></script>
    <script src="http://HdhCmsTestcnblogs测试数据/03GridView/js/GridViewBase.js" type="text/javascript"></script>
    <script src="http://HdhCmsTestcnblogs测试数据/03GridView/js/GridColum.js" type="text/javascript"></script>
    <script src="http://HdhCmsTestcnblogs测试数据/03GridView/js/GridRow.js" type="text/javascript"></script>
    <script src="http://HdhCmsTestcnblogs测试数据/03GridView/js/GridView.js" type="text/javascript"></script>
    <script type="text/javascript">
         //  initGrid 

         var  gridDataBind =  function   (data) {
              var  tb = $("#tb" );
              var  grid =  new   GridView();
            grid.style  =  {
                  '70%' 
            };
            grid.attribute  =  {
                className:  'infolist_hr' 
            };
            grid.parentEl  =  tb;
            grid.dataSource  =  data;
            grid.colModel  =  [{
                 'th': { 'title': '<input type="checkbox" class="th_select" />', 'attribute': { 'className': 'common' } },
                 'td': { 'template': '<input type="checkbox" class="td_select" />', 'style': { 'width': '2%' }, 'attribute': { 'className': 'common indentten' } }
            }, {
                 'th': { 'title': '标题', 'attribute': { 'className': 'common' } },
                 'td': { 'template': '{%title%}', 'style': { 'width': '40%' }, 'attribute': { 'className': 'common indentten' } }
            }, {
                 'th': { 'title': '来源', 'attribute': { 'className': 'common' } },
                 'td': { 'template': '{%from%}', 'style': { 'width': '20%' }, 'attribute': { 'className': 'common indentten' } }
            }, {
                 'th': { 'title': '时间', 'attribute': { 'className': 'common' } },
                 'td': { 'template': '{%created%}', 'style': { 'width': '15%' }, 'attribute': { 'className': 'common indentten' } }
            }, {
                 'th': { 'title': '', 'attribute': { 'className': 'common' } },
                 'td': { 'template': '<span class="edit" style="cursor: pointer;" >编辑</span>&nbsp;&nbsp;<span class="delete" style="cursor: pointer;" >删除</span>', 'style': { 'width': '13%' }, 'attribute': { 'className': 'common indentten' } }
            }];

            grid.render();
        };
          var  bind =  function   (start, limit) {
              if  (! start) {
                start  = 0 ;
            }
              if  (! limit) {
                limit  = 9 ;
            }
              var  url = "http://113.142.30.139/tpw-webapp/rest/proxy/news_ln_statistics?jsonp=?&start=" + start + "&limit=" +  limit;
              var  tb = $("#tb" );
            tb.html( "数据正在加载......" );
            $.getJSON(url,   function   (data) {
                tb.html( "" );
                  if  (data &&  typeof  (data) == 'string' ) {
                    data  = eval('(' + data + ')' );
                }   //  if 
                 if   (data.data) {
                    data  =  data.data;
                }

                gridDataBind(data);
               
            });   //  $.getJSON( 
         };
          var  pageChanged =  function   (page) {
              var  start = page.pageIndex *  page.cfg.pageSize;
              var  limit =  page.cfg.pageSize;
            bind(start, limit);
              return   false  ;
        };
          var  initPage =  function   () {
              var  page = $('#page' );
              var  url = "http://113.142.30.139/tpw-webapp/rest/proxy/news_ln_statistics" ;
              var  page =  new   Pagination({
                parentEl: page,
                pageChanged: pageChanged
            });
            page.allRow  = 100 ;
            page.render();
        };

        $(document).ready(  function   () {
            bind();
            initPage();
        });        //  $(document) 
    </script>
</head>
<body>
    <div id="tb">
    </div>
    <div id="page">
    </div>
</body>
</html>

分页控件代码

 var  Pagination =  function   (_cfg) {
      var  sender =  this  ;
      this .cfg =  {
        parentEl: $( 'body' ),
        pageSize:  10 ,
        pageNum:  7,  //  每页放几个显示的1,2,3,4 
        pageEdge: 2 ,
        linkTo:  '#' ,
        linkText:  'pageno' ,
        preText:  '上一页' ,
        nextText:  '下一页' ,
        ellipseText:  "..." ,
        pageChaged:   function  () {  return   false  ; }
    };
      if   (_cfg) {
        $.each(_cfg,   function   (key, value) {
            sender.cfg[key]  =  value;
        });
    }
      this .pageIndex = 0 ;
      this .allRow = 0 ;
      this .totalPage = 0 ;
      this .el =  null  ;
      this .visible =  false  ;
      this .prePage =  null  ;
      this .nextPage =  null  ;
      this .numPage =  null  ;
};

Pagination.prototype.render  =  function   () {
      this  .onInit();
      this  .preRender();
};

Pagination.prototype.preRender  =  function   () {
      var  scope =  this  ;
      var  prePage =  this  .prePage;
      var  nextPage =  this  .nextPage;
      var  numPage =  this  .numPage;
      var  total =  this  .totalPage;
      var  index =  this  .pageIndex;
    prePage.attr( 'class', 'prev' );
      if  (index == 0 ) {
        prePage.attr( 'class', 'current prev' );
    }
    nextPage.attr( 'class', 'next' );
      if  (index == total - 1 ) {
        nextPage.attr( 'class', 'current next' );
    }
    $.each(numPage,   function   (i, item) {
        item.removeAttr( 'class' );
          if  (scope.pageIndex == parseInt(item.html()) - 1 ) {
            item.attr( 'class', 'current' );
        }
    });
};

Pagination.prototype.onInit  =  function   () {
      this  .init();
      this  .initHtml();
      this  .eventBind();
};

Pagination.prototype.init  =  function   () {
      var  cfg =  this  .cfg;
      var  totalPage =  this  .totalPage;
      var  allRow =  this  .allRow;
      var  pageSize =  cfg.pageSize;
      this .totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow / pageSize + 1 ;
      this .totalPage = parseInt( this  .totalPage);
      if  (totalPage <= 1 ) {
          this .visible =  false  ;
    }
};

Pagination.prototype.getNumPage  =  function   () {
      var  cfg =  this  .cfg;
      var  pageSize =  cfg.pageSize;
      var  index =  this  .pageIndex;
      var  totalPage =  this  .totalPage;
      var  pageNum =  cfg.pageNum;
      var  limit = pageNum / 2 ;
      var  _limit =  parseInt(limit);
    limit  = limit > _limit ? _limit + 1  : _limit;
      var  numPage =  [];
      var  numArr =  [];
      for  ( var  i = 0; i < pageNum; i++ ) {
          if  (index <  limit) {
            numArr.push(i  + 1 );
        }   else   if  (totalPage - index <=  limit) {
            numArr.push(totalPage  - pageNum + i + 1 );
        }   else   {
            numArr.push(index  - limit + i + 2 );
        }
    }
      var  elStr = '' ;
      var  linkTo =  cfg.linkTo;
      if  (linkTo == '#' ) {
          for  ( var  i = 0, len = numArr.length; i < len; i++ ) {
              var  tempEl = $('<a href="#">' + numArr[i].toString() + '</a>' );
            numPage.push(tempEl)
        }
    }   else   {
          var  linkText =  cfg.linkText;
          var  sign = '?' ;
          if  (linkTo.indexOf('?') != -1 ) {
            sign  = '&' ;
        }
          for  ( var  i = 0, len = numArr.length; i < len; i++ ) {
              var  tempEl = $('<a href="' + linkTo + sign + linkText + '=' + i.toString() + '">' + numArr[i].toString() + '</a>' );
            numPage.push(tempEl);
        }
    }
      return   numPage;
};

Pagination.prototype.initHtml  =  function   () {
      var  cfg =  this  .cfg;
      var  pageInfo = $('<div class="pagination"></div>' );
      var  linkTo =  cfg.linkTo;
      var  _pre = '<a href="#" class="prev">上一页</a>' ;
      var  _nex = '<a href="#" class="next">下一页</a>' ;
      if  (linkTo != '#' ) {
          var  linkText =  cfg.linkText;
          var  sign = '?' ;
          if  (linkTo.indexOf('?') != -1 ) {
            sign  = '&' ;
        }
        _pre  = '<a href="' + linkTo + sign + linkText + '=' + (parseInt( this .pageIndex) - 1) + '" class="prev">上一页</a>' ;
        _nex  = '<a href="' + linkTo + sign + linkText + '=' + (parseInt( this .pageIndex) + 1) + '" class="next">下一页</a>' ;

    }

      var  prePage =  $(_pre);
      var  nextPage =  $(_nex);
      var  numPage =  this  .getNumPage();
    pageInfo.append(prePage);

    $.each(numPage,   function   (i, item) {
        pageInfo.append(item);
    });

    pageInfo.append(nextPage);
      this .el =  pageInfo;
      this .prePage =  prePage;
      this .nextPage =  nextPage;
      this .numPage =  numPage;
    cfg.parentEl.append(pageInfo);
};

Pagination.prototype.eventBind  =  function   (func) {
      var  scope =  this  ;
      var  cfg =  this  .cfg;
      var  prePage =  this  .prePage;
      var  nextPage =  this  .nextPage;
      var  numPage =  this  .numPage;


    prePage.unbind( 'click' );
    prePage.bind( 'click',  function   (e) {
          if  (scope.pageIndex != 0 ) {
            scope.pageIndex  = scope.pageIndex - 1 ;
            scope.pageChanged();
        }
    });
    $.each(numPage,   function   (i, item) {
        item.unbind( 'click' );
        item.bind( 'click',  function   (e) {
              if  (scope.pageIndex != parseInt(item.html()) - 1 ) {
                scope.pageIndex  = parseInt(item.html()) - 1 ;
                scope.pageChanged();
            }
        });
    });

    nextPage.unbind( 'click' );
    nextPage.bind( 'click',  function   (e) {
          if  (scope.pageIndex != scope.totalPage - 1 ) {
            scope.pageIndex  = scope.pageIndex + 1 ;
            scope.pageChanged();
        }
    });
};

Pagination.prototype.pageChanged  =  function   () {
      var  scope =  this  ;
      var  cfg =  this  .cfg;
    scope.el.remove();
      var  pageChaged =  cfg.pageChanged;
      if  (pageChaged &&  typeof  (pageChaged) == 'function' ) {
        pageChaged(  this  );
      
    }
      this  .render();
      //      alert(this.pageIndex); 
};

后续

由于各方面皆不完整,此处便不作详细说明,有必要的话,以后整理后会形成API,但是可能没有必要,因为代码总的来说还是很水的......

在学习吧......

 

分类:  Web前端

作者: Leo_wl

    

出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于【jquery模仿net控件】简单分页控件1.0,附上gridview使用测试的详细内容...

  阅读:35次