bootstrap实现分页(实例)

版权声明:您可以转载我的文章,但是请标明文章出处。谢谢! https://blog.csdn.net/qq_41485414/article/details/79622931

写前端都会面临的一个问题就是分页,如果是纯js分页也是可以的,只是可能代码量比较大,所以今天写一个关于用bootstrap框架分页的例子,希望以后可以帮助到一些对这方面比较头疼的码农。

首先需要明确的一点是,哪些数据是需要分页的,单从数据显示上其实是没有必要分页的,因为页面是可以显示的出来的,但是作为一个相对比较合格的前端,你首先要考虑的不仅仅是这个功能是不是可以实现,而是要考虑用户体验是不是好的,在既有功能上如果可以更多的考虑用户体验的问题,那么才可以算是一个相对比较合格的前端工程师。

先看渲染图:


这个是一个项目中的例子,今天就做以这个为例子,做一下

首先我们将需要用的数据准备好(这个一般是ajax请求到的数据,现在我们直接放到一个js里面,加载js的时候直接取出数据)


     
     
  1. var testboke = {
  2. "code": 200,
  3. "message": null,
  4. "data":{
  5. "total": 17, //总条数
  6. "size": 10, //分页大小-默认为0
  7. "pages": 2, //总页数
  8. "current": 1, //当前页数
  9. "records":[ //author-riverLethe-double-slash-note数据部分
  10. {
  11. "id": 17, //项目id
  12. "userName": "Night夜", //发起人名称
  13. "companyName": "康佰裕", //发起人公司名称
  14. "ptypeName": "13", //发起项目类别
  15. "pask": "13",
  16. "pname": "13",
  17. "pdesc": "13"
  18. },
  19. {
  20. "id": 16,
  21. "userName": "Night夜",
  22. "companyName": "康佰裕",
  23. "ptypeName": "12",
  24. "pask": "12",
  25. "pname": "12",
  26. "pdesc": "12"
  27. },
  28. {
  29. "id": 15,
  30. "userName": "BB机",
  31. "companyName": "北京电影",
  32. "ptypeName": "11",
  33. "pask": "11",
  34. "pname": "11",
  35. "pdesc": "11"
  36. },
  37. {
  38. "id": 14,
  39. "userName": "BB机",
  40. "companyName": "北京电影",
  41. "ptypeName": "9",
  42. "pask": "9",
  43. "pname": "9",
  44. "pdesc": "9"
  45. },
  46. {
  47. "id": 13,
  48. "userName": "BB机",
  49. "companyName": "北京电影",
  50. "ptypeName": "7",
  51. "pask": "7",
  52. "pname": "7",
  53. "pdesc": "7"
  54. },
  55. {
  56. "id": 12,
  57. "userName": "Night夜",
  58. "companyName": "康佰裕",
  59. "ptypeName": "6",
  60. "pask": "6",
  61. "pname": "6",
  62. "pdesc": "6"
  63. },
  64. {
  65. "id": 11,
  66. "userName": "BB机",
  67. "companyName": "北京电影",
  68. "ptypeName": "5",
  69. "pask": "5",
  70. "pname": "5",
  71. "pdesc": "5"
  72. },
  73. {
  74. "id": 10,
  75. "userName": "Night夜",
  76. "companyName": "康佰裕",
  77. "ptypeName": "4",
  78. "pask": "4",
  79. "pname": "4",
  80. "pdesc": "4"
  81. },
  82. {
  83. "id": 9,
  84. "userName": "BB机",
  85. "companyName": "北京电影",
  86. "ptypeName": "3",
  87. "pask": "3",
  88. "pname": "3",
  89. "pdesc": "3"
  90. },
  91. {
  92. "id": 8,
  93. "userName": "Night夜",
  94. "companyName": "康佰裕",
  95. "ptypeName": "2",
  96. "pask": "2",
  97. "pname": "2",
  98. "pdesc": "2"
  99. }
  100. ]
  101. }
  102. }

接下来画页面的表格:


     
     
  1. <body>
  2. <div class="templatemo-content col-1 light-gray-bg">
  3. <div class="templatemo-top-nav-container">
  4. <div class="row">
  5. <nav class="templatemo-top-nav col-lg-12 col-md-12">
  6. <li>
  7. <a href="">发起项目列表管理 </a>
  8. </li>
  9. </nav>
  10. </div>
  11. </div>
  12. <!--正文部分-->
  13. <div style="background: #E8E8E8;height: 60rem;">
  14. <div class="templatemo-content-container">
  15. <div class="templatemo-content-widget no-padding">
  16. <!--表头-->
  17. <div class="panel-heading templatemo-position-relative">
  18. <h2 class="text-uppercase">发起项目列表 </h2> </div>
  19. <div class="panel panel-default table-responsive" id="mainContent">
  20. </div>
  21. </div>
  22. </div>
  23. </div>
  24. <div class="pagination-wrap" id="callBackPager">
  25. </div>
  26. <footer class="text-right">
  27. <p>Copyright &copy; 2018 Company Name | Designed by
  28. <a href="http://www.csdn.com" target="_parent">csdn </a>
  29. </p>
  30. </footer>
  31. </body>

这个时候也页面上是没有任何的元素的,因为我们需要的是将页面上的表格用js动态的画出来,这样才可以实现取出来的数据是可以分页的,但是画表格的前提是你要可以拿到数据对不对,所以接下来应该是拿数据,而不是急着画表格,因为没有数据的时候你的表格即使是画出来了,也是显示不出来的,那么我们开始拿数据:

我们写一个函数取数据:


     
     
  1. /*将数据取出来*/
  2. function data(curr, limit) {
  3. //console.log("tot:"+totalCount)
  4. /*拿到总数据*/
  5. totalCount = testboke.data.total; //取出来的是数据总量
  6. dataLIst = testboke.data.records; // 将数据放到一个数组里面(dataLIst 还未声明,莫着急)
  7. createTable(curr, limit, totalCount);
  8. console.log( "tot:"+totalCount)
  9. }

拿到数据以后怎么做,分页,是的,不是急着将数据放到表格里面,先分页,ok我们加载分页的js(bootstrap的分页js)


     
     
  1. <link href="../../css/font-awesome.min.css" rel="stylesheet" />
  2. <link href="../../css/bootstrap.min.css" rel="stylesheet" />
  3. <link href="../../css/templatemo-style.css" rel="stylesheet" />
  4. <link href="../../css/layui/css/layui.css" rel="stylesheet" />
  5. <script src="../../js/bootstrap.min.js" type="text/javascript"> </script>
  6. <script src="../../js/jquery-1.8.3-min.js" type="text/javascript"> </script>
  7. <script src="../../js/jquery.min.js" type="text/javascript"> </script>
  8. <script src="../../js/extendPagination.js" type="text/javascript"> </script>
  9. <script src="../../js/layui/lay/dest/layui.all.js" type="text/javascript"> </script>
  10. <!--引如测试数据的js-->
  11. <script src="../../js/testcode.js" type="text/javascript"> </script>

上面的这些js,css都可以去cdn上面找到,除了testcode,在最上面,就是我们加载数据的js。

下面就是将分页的代码写上:


     
     
  1. var currPage = 1;
  2. var totalCount;
  3. var dataLIst = [];
  4. window.onload = function() {
  5. /*取到总条数*/
  6. /*每页显示多少条 10条*/
  7. var limit = 10;
  8. data(currPage, limit)
  9. //console.log(totalCount)
  10. createTable( 1, limit, totalCount);
  11. $( '#callBackPager').extendPagination({
  12. totalCount: totalCount,
  13. limit: limit,
  14. callback: function(curr, limit, totalCount) {
  15. data(curr, limit)
  16. }
  17. });
  18. }

加载以后的效果是这样的:

这个时候就是已经基本将数据处理好了,只是没有将数据放进去,最后我们将数据放进去就可以了,(我的写法不建议借鉴,很多现成的循环画表格的方法,我是原生的拼接字符串写的,不嫌麻烦的可以自己拼一下,毕竟不管是什么框架,最底层的还是这样的实现原理)


     
     
  1. /*创建的是一个表格,并将数据放进去*/
  2. function createTable(currPage, limit, total) {
  3. var html = [],
  4. showNum = limit;
  5. if(total - (currPage * limit) < 0) showNum = total - ((currPage - 1) * limit);
  6. html.push( ' <table class="table table-striped table-bordered templatemo-user-table" style="margin-left: 0;">');
  7. html.push( ' <thead><tr><th>序号</th><th>项目名称</th><th>类别</th><th>发起人</th><th>单位</th><th>详情</th><th>操作</th></tr></thead><tbody>');
  8. for( var i = 0; i < showNum; i++) {
  9. html.push( '<tr>');
  10. html.push( '<td>' + dataLIst[i].id + '</td>');
  11. html.push( '<td>' + dataLIst[i].pname + '</td>');
  12. html.push( '<td>' + dataLIst[i].ptypeName + '</td>');
  13. html.push( '<td>' + dataLIst[i].userName + '</td>');
  14. html.push( '<td>' + dataLIst[i].companyName + '</td>');
  15. html.push( '<td><a href="project_details_init.html?id='+dataLIst[i].id+ '" class="templatemo-edit-btn">详情</a></td>');
  16. html.push( '<td><button class="templatemo-edit-btn" onclick=checkproject(' + dataLIst[i].id + ',"1")>同意' +
  17. '</button> <button class="templatemo-edit-btn" onclick=checkproject(' + dataLIst[i].id + ',"2")>拒绝</button></td>');
  18. html.push( '</tr>');
  19. }
  20. html.push( '</tbody></table>');
  21. var mainObj = $( '#mainContent');
  22. mainObj.empty();
  23. mainObj.html(html.join( ''));
  24. }

ok,到这里基本就已经将一个页面加载数据和分页处理结束了,是不是很简单,其实本来就不难,只是很多的时候我们不想去测试,当然中间取数据的地方是ajax来处理的,但是为了给你们举例子,我只能将ajax那块取数据的地方直接写到js里面,这个数据是动态的,用ajax取数据的时候,然后就是这个分页其实是后端给数据的时候就已经分好的,我们只是将数据拿到,告诉他页码,他给我们对应页码的数据,前端如果将所有的数据全部拿出来,是不是不可以分页呢?不是的,也是可以的,只是这样的分页性能会很差,因为每次你拿到的数据都是数据库查询所有的数据拿出来的数据,这样对数据库的压力太大了,我们一般叫这种分页为假分页。

ok最后简单的总结一下,分页其实不难,难在怎么理解这个思路,我看了很多的分页的代码,有的是原生的js分页,是可以实现的,但是只是对于开发者来说是一件得不偿失的事情,毕竟前人是给我们提供的有办法的,我们是没必要纠结那些,代码怎么简单快速的实现是最好的方式。

小生不才,有自己的网站搞机族,关于手机的,感兴趣的可以看看,交流一下心得。



阅读更多
版权声明:您可以转载我的文章,但是请标明文章出处。谢谢! https://blog.csdn.net/qq_41485414/article/details/79622931

写前端都会面临的一个问题就是分页,如果是纯js分页也是可以的,只是可能代码量比较大,所以今天写一个关于用bootstrap框架分页的例子,希望以后可以帮助到一些对这方面比较头疼的码农。

首先需要明确的一点是,哪些数据是需要分页的,单从数据显示上其实是没有必要分页的,因为页面是可以显示的出来的,但是作为一个相对比较合格的前端,你首先要考虑的不仅仅是这个功能是不是可以实现,而是要考虑用户体验是不是好的,在既有功能上如果可以更多的考虑用户体验的问题,那么才可以算是一个相对比较合格的前端工程师。

先看渲染图:


这个是一个项目中的例子,今天就做以这个为例子,做一下

首先我们将需要用的数据准备好(这个一般是ajax请求到的数据,现在我们直接放到一个js里面,加载js的时候直接取出数据)


  
  
  1. var testboke = {
  2. "code": 200,
  3. "message": null,
  4. "data":{
  5. "total": 17, //总条数
  6. "size": 10, //分页大小-默认为0
  7. "pages": 2, //总页数
  8. "current": 1, //当前页数
  9. "records":[ //author-riverLethe-double-slash-note数据部分
  10. {
  11. "id": 17, //项目id
  12. "userName": "Night夜", //发起人名称
  13. "companyName": "康佰裕", //发起人公司名称
  14. "ptypeName": "13", //发起项目类别
  15. "pask": "13",
  16. "pname": "13",
  17. "pdesc": "13"
  18. },
  19. {
  20. "id": 16,
  21. "userName": "Night夜",
  22. "companyName": "康佰裕",
  23. "ptypeName": "12",
  24. "pask": "12",
  25. "pname": "12",
  26. "pdesc": "12"
  27. },
  28. {
  29. "id": 15,
  30. "userName": "BB机",
  31. "companyName": "北京电影",
  32. "ptypeName": "11",
  33. "pask": "11",
  34. "pname": "11",
  35. "pdesc": "11"
  36. },
  37. {
  38. "id": 14,
  39. "userName": "BB机",
  40. "companyName": "北京电影",
  41. "ptypeName": "9",
  42. "pask": "9",
  43. "pname": "9",
  44. "pdesc": "9"
  45. },
  46. {
  47. "id": 13,
  48. "userName": "BB机",
  49. "companyName": "北京电影",
  50. "ptypeName": "7",
  51. "pask": "7",
  52. "pname": "7",
  53. "pdesc": "7"
  54. },
  55. {
  56. "id": 12,
  57. "userName": "Night夜",
  58. "companyName": "康佰裕",
  59. "ptypeName": "6",
  60. "pask": "6",
  61. "pname": "6",
  62. "pdesc": "6"
  63. },
  64. {
  65. "id": 11,
  66. "userName": "BB机",
  67. "companyName": "北京电影",
  68. "ptypeName": "5",
  69. "pask": "5",
  70. "pname": "5",
  71. "pdesc": "5"
  72. },
  73. {
  74. "id": 10,
  75. "userName": "Night夜",
  76. "companyName": "康佰裕",
  77. "ptypeName": "4",
  78. "pask": "4",
  79. "pname": "4",
  80. "pdesc": "4"
  81. },
  82. {
  83. "id": 9,
  84. "userName": "BB机",
  85. "companyName": "北京电影",
  86. "ptypeName": "3",
  87. "pask": "3",
  88. "pname": "3",
  89. "pdesc": "3"
  90. },
  91. {
  92. "id": 8,
  93. "userName": "Night夜",
  94. "companyName": "康佰裕",
  95. "ptypeName": "2",
  96. "pask": "2",
  97. "pname": "2",
  98. "pdesc": "2"
  99. }
  100. ]
  101. }
  102. }

接下来画页面的表格:


  
  
  1. <body>
  2. <div class="templatemo-content col-1 light-gray-bg">
  3. <div class="templatemo-top-nav-container">
  4. <div class="row">
  5. <nav class="templatemo-top-nav col-lg-12 col-md-12">
  6. <li>
  7. <a href="">发起项目列表管理 </a>
  8. </li>
  9. </nav>
  10. </div>
  11. </div>
  12. <!--正文部分-->
  13. <div style="background: #E8E8E8;height: 60rem;">
  14. <div class="templatemo-content-container">
  15. <div class="templatemo-content-widget no-padding">
  16. <!--表头-->
  17. <div class="panel-heading templatemo-position-relative">
  18. <h2 class="text-uppercase">发起项目列表 </h2> </div>
  19. <div class="panel panel-default table-responsive" id="mainContent">
  20. </div>
  21. </div>
  22. </div>
  23. </div>
  24. <div class="pagination-wrap" id="callBackPager">
  25. </div>
  26. <footer class="text-right">
  27. <p>Copyright &copy; 2018 Company Name | Designed by
  28. <a href="http://www.csdn.com" target="_parent">csdn </a>
  29. </p>
  30. </footer>
  31. </body>

这个时候也页面上是没有任何的元素的,因为我们需要的是将页面上的表格用js动态的画出来,这样才可以实现取出来的数据是可以分页的,但是画表格的前提是你要可以拿到数据对不对,所以接下来应该是拿数据,而不是急着画表格,因为没有数据的时候你的表格即使是画出来了,也是显示不出来的,那么我们开始拿数据:

我们写一个函数取数据:


  
  
  1. /*将数据取出来*/
  2. function data(curr, limit) {
  3. //console.log("tot:"+totalCount)
  4. /*拿到总数据*/
  5. totalCount = testboke.data.total; //取出来的是数据总量
  6. dataLIst = testboke.data.records; // 将数据放到一个数组里面(dataLIst 还未声明,莫着急)
  7. createTable(curr, limit, totalCount);
  8. console.log( "tot:"+totalCount)
  9. }

拿到数据以后怎么做,分页,是的,不是急着将数据放到表格里面,先分页,ok我们加载分页的js(bootstrap的分页js)


  
  
  1. <link href="../../css/font-awesome.min.css" rel="stylesheet" />
  2. <link href="../../css/bootstrap.min.css" rel="stylesheet" />
  3. <link href="../../css/templatemo-style.css" rel="stylesheet" />
  4. <link href="../../css/layui/css/layui.css" rel="stylesheet" />
  5. <script src="../../js/bootstrap.min.js" type="text/javascript"> </script>
  6. <script src="../../js/jquery-1.8.3-min.js" type="text/javascript"> </script>
  7. <script src="../../js/jquery.min.js" type="text/javascript"> </script>
  8. <script src="../../js/extendPagination.js" type="text/javascript"> </script>
  9. <script src="../../js/layui/lay/dest/layui.all.js" type="text/javascript"> </script>
  10. <!--引如测试数据的js-->
  11. <script src="../../js/testcode.js" type="text/javascript"> </script>

上面的这些js,css都可以去cdn上面找到,除了testcode,在最上面,就是我们加载数据的js。

下面就是将分页的代码写上:


  
  
  1. var currPage = 1;
  2. var totalCount;
  3. var dataLIst = [];
  4. window.onload = function() {
  5. /*取到总条数*/
  6. /*每页显示多少条 10条*/
  7. var limit = 10;
  8. data(currPage, limit)
  9. //console.log(totalCount)
  10. createTable( 1, limit, totalCount);
  11. $( '#callBackPager').extendPagination({
  12. totalCount: totalCount,
  13. limit: limit,
  14. callback: function(curr, limit, totalCount) {
  15. data(curr, limit)
  16. }
  17. });
  18. }

加载以后的效果是这样的:

这个时候就是已经基本将数据处理好了,只是没有将数据放进去,最后我们将数据放进去就可以了,(我的写法不建议借鉴,很多现成的循环画表格的方法,我是原生的拼接字符串写的,不嫌麻烦的可以自己拼一下,毕竟不管是什么框架,最底层的还是这样的实现原理)


  
  
  1. /*创建的是一个表格,并将数据放进去*/
  2. function createTable(currPage, limit, total) {
  3. var html = [],
  4. showNum = limit;
  5. if(total - (currPage * limit) < 0) showNum = total - ((currPage - 1) * limit);
  6. html.push( ' <table class="table table-striped table-bordered templatemo-user-table" style="margin-left: 0;">');
  7. html.push( ' <thead><tr><th>序号</th><th>项目名称</th><th>类别</th><th>发起人</th><th>单位</th><th>详情</th><th>操作</th></tr></thead><tbody>');
  8. for( var i = 0; i < showNum; i++) {
  9. html.push( '<tr>');
  10. html.push( '<td>' + dataLIst[i].id + '</td>');
  11. html.push( '<td>' + dataLIst[i].pname + '</td>');
  12. html.push( '<td>' + dataLIst[i].ptypeName + '</td>');
  13. html.push( '<td>' + dataLIst[i].userName + '</td>');
  14. html.push( '<td>' + dataLIst[i].companyName + '</td>');
  15. html.push( '<td><a href="project_details_init.html?id='+dataLIst[i].id+ '" class="templatemo-edit-btn">详情</a></td>');
  16. html.push( '<td><button class="templatemo-edit-btn" onclick=checkproject(' + dataLIst[i].id + ',"1")>同意' +
  17. '</button> <button class="templatemo-edit-btn" onclick=checkproject(' + dataLIst[i].id + ',"2")>拒绝</button></td>');
  18. html.push( '</tr>');
  19. }
  20. html.push( '</tbody></table>');
  21. var mainObj = $( '#mainContent');
  22. mainObj.empty();
  23. mainObj.html(html.join( ''));
  24. }

ok,到这里基本就已经将一个页面加载数据和分页处理结束了,是不是很简单,其实本来就不难,只是很多的时候我们不想去测试,当然中间取数据的地方是ajax来处理的,但是为了给你们举例子,我只能将ajax那块取数据的地方直接写到js里面,这个数据是动态的,用ajax取数据的时候,然后就是这个分页其实是后端给数据的时候就已经分好的,我们只是将数据拿到,告诉他页码,他给我们对应页码的数据,前端如果将所有的数据全部拿出来,是不是不可以分页呢?不是的,也是可以的,只是这样的分页性能会很差,因为每次你拿到的数据都是数据库查询所有的数据拿出来的数据,这样对数据库的压力太大了,我们一般叫这种分页为假分页。

ok最后简单的总结一下,分页其实不难,难在怎么理解这个思路,我看了很多的分页的代码,有的是原生的js分页,是可以实现的,但是只是对于开发者来说是一件得不偿失的事情,毕竟前人是给我们提供的有办法的,我们是没必要纠结那些,代码怎么简单快速的实现是最好的方式。

小生不才,有自己的网站搞机族,关于手机的,感兴趣的可以看看,交流一下心得。



猜你喜欢

转载自blog.csdn.net/lida1234567/article/details/83151845