关于分页

分页是在页面上常见的一个效果,当然实现分页的方式也有很多,一般有两种思想。

1.把数据全部加载后,利用设置部分显示,其他隐藏。

2.根据点击事件,从前台传值给后台,后台再封装成接口,前台根据前台的接口用ajax加载数据,每次点击时调用不同的ajax。

一般网页上都是使用第二种方式,不过第一种方式更简单一些,今天先分享下第一种方式

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>Document</title>
  6     <link rel="stylesheet" type="text/css" href="bootstrap.min.css" />
  7     <style>
  8
  9         nav.pagination{
 10             text-align: center;
 11             cursor: pointer;
 12         }
 13         tr.hidetr{
 14             display: none;
 15         }
 16         .active{
 17             color:red !important;
 18         }
 19     </style>
 20 </head>
 21 <body>
 22 <div class="container">
 23     <div class="row">
 24         <div id="mytab" class="col-md-4 col-md-offset-4">
 25         </div>
 26     </div>
 27
 28 </div>
 29
 30 <script src="jquery-1.11.0.min.js"></script>
 31 <script src="bootstrap.min.js"></script>
 32 <script>
 33 //造数据
 34     var mydata=[];
 35     for (var m = 0; m < 100; m++) {
 36         mydata.push({"name":"haha","age":m,"like":"book"+m});
 37     }
 38 (function($){
 39     $.fn.initTable=function(options){
 40         //默认值
 41         var defaults={
 42             //是否分页
 43             pageOn:true,
 44             //每页显示数量
 45             pageNum:6,
 46             //数据
 47             data:[],
 48             //对应关系
 49             tdclun:[{"key":""}],
 50             //表头名称
 51             th:["th","th"],
 52         };
 53         var opts=$.extend({}, defaults, options);
 54         var tab = $("<table>").addClass(‘table table-striped table-bordered‘);
 55         var theadtr = $("<tr>");
 56         var tbodytr = $("<tbody>");
 57
 58
 59         for (var i = 0; i < opts.th.length; i++) {
 60             theadtr.append($("<th>").text(opts.th[i]));
 61         }
 62         tab.append($("<thead>").append(theadtr));
 63         for (var n = 0; n < opts.data.length; n++) {
 64             var tr = $("<tr>");
 65                 if(n>opts.pageNum){
 66                     tr.addClass(‘hidetr‘);
 67                 }
 68             for (var j = 0; j < opts.tdclun.length; j++) {
 69                 tr.append($("<td>").text(opts.data[n][opts.tdclun[j].key]));
 70             }
 71             tbodytr.append(tr);
 72         }
 73         tab.append(tbodytr);
 74
 75         $(this).append(tab);
 76
 77         var num=Math.ceil(opts.data.length/opts.pageNum);
 78         var str=‘<nav class="pagination"><ul><li><a>《</a></li>‘;
 79         for(var k=0;k<num;k++){
 80             if(k==0){
 81                 str+=‘<li><a class="active">‘+(1)+‘</a></li>‘;
 82             }else{
 83                 str+=‘<li><a>‘+(k+1)+‘</a></li>‘;
 84             }
 85         }
 86         str+=‘<li><a>》</a></li></ul></nav>‘
 87         $(this).append(str);
 88
 89          var box = $(this);
 90         box.find(‘a‘).click(function(){
 91
 92             var len=$(‘.pagination li‘).length-2;
 93             var index=$(this).text();
 94             var nowPage=$(‘.active‘).parent().index();
 95
 96             if($(this).text()==‘》‘){
 97                if(nowPage==len){
 98                     return false;
 99                 }else{
100                     nowPage++;
101                     // console.log(nowPage);
102                     change();
103                 }
104             }else if($(this).text()==‘《‘){
105                 if(nowPage==1){
106                     return false;
107                 }else{
108                     nowPage--;
109                     // console.log(nowPage);
110                     $(‘.pagination li a‘).eq(nowPage).addClass(‘active‘).parent().siblings().find(‘a‘).removeClass(‘active‘);
111                    change();
112                 }
113             }else{
114                 $(this).addClass(‘active‘).parent().siblings().find(‘a‘).removeClass(‘active‘);
115                 box.find(‘tbody tr‘).eq((index-1)*opts.pageNum).removeClass(‘hidetr‘).prevAll().addClass(‘hidetr‘);
116                 box.find(‘tbody tr‘).eq((index-1)*opts.pageNum).nextAll().removeClass(‘hidetr‘);
117                 box.find(‘tbody tr‘).eq((index-0)*opts.pageNum).nextAll().addClass(‘hidetr‘);
118             }
119
120             function change(){
121                  $(‘.pagination li a‘).eq(nowPage).addClass(‘active‘).parent().siblings().find(‘a‘).removeClass(‘active‘);
122                     box.find(‘tbody tr‘).eq((nowPage-1)*opts.pageNum).removeClass(‘hidetr‘).prevAll().addClass(‘hidetr‘);
123                     box.find(‘tbody tr‘).eq((nowPage-1)*opts.pageNum).nextAll().removeClass(‘hidetr‘);
124                     box.find(‘tbody tr‘).eq((nowPage)*opts.pageNum).nextAll().addClass(‘hidetr‘);
125             }
126         })
127     }
128 })(jQuery);
129
130 //调用
131     $("#mytab").initTable({
132         "pageNum":6,
133         "th":["姓名","年纪","喜好"],
134         "data":mydata,
135         "tdclun":[{"key":"name"},{"key":"age"},{"key":"like"}]
136     });
137
138 </script>
139 </body>
140 </html>

使用bootstrap进行简单布局,功能上使用jq封装了一个新的方法,其中有几个配置项,当然如果可以拓展的话直接在配置项里面写就可以了。

如有错误请各位大神指正,不胜感激!

时间: 2025-01-06 21:08:27

关于分页的相关文章

python__Django 分页

自定义分页的类: #!/usr/bin/env python # -*- coding: utf-8 -*- # Created by Mona on 2017/9/20 from django.utils.safestring import mark_safe class Paginator: ''' 页码的格式依赖于bootstrap: 使用案例: from django.shortcuts import render,redirect,HttpResponse from app01.mod

ajax+分页

<!DOCTYPE html><html><head lang="zh-cn"><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><meta http-equiv="X-UA-Compat

使用插件bootstrap-table实现表格记录的查询、分页、排序等处理

在业务系统开发中,对表格记录的查询.分页.排序等处理是非常常见的,在Web开发中,可以采用很多功能强大的插件来满足要求,且能极大的提高开发效率,本随笔介绍这个bootstrap-table是一款非常有名的开源表格插件,在很多项目中广泛的应用.Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询.分页.排序.复选框.设置显示列.Card view视图.主从表显示.合并列.国际化处理等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行.移动列位置等一些特殊的功能,插件可

优化LIMIT分页

在系统中需要分页的操作通常会使用limit加上偏移量的方法实现,同时加上合适的order by 子句.如果有对应的索引,通常效率会不错,否则MySQL需要做大量的文件排序操作. 一个非常令人头疼问题就是当偏移量非常大的时候,例如可能是limit 10000,20这样的查询,这是mysql需要查询10020条然后只返回最后20条,前面的10000条记录都将被舍弃,这样的代价很高.如果所有的页面被访问的频率相同,那么这样的查询平均需要访问半个表的数据.要优化这样的查询,要么实在页面中限制分页的数量,

Ajax实现无刷新分页

注:本文中使用到的一些类库在前面文章都能找到源代码,我会在文中指明链接所在,为了缩短文章篇幅,由此带来的阅读不便,敬请谅解. 本文讲解 Ajax 实现无刷新分页.实现原理.代码展示.代码下载. 这里需要说明一些知识: 1.Ajax 无刷新页面的好处:提供良好的客户体验,通过 Ajax 在后台从数据库中取得数据并展示,取缔了等待加载页面而出现的空白状态: 2.那么,Ajax 无刷新页面是运行在动态页面(.PHP)?还是静态页面(.html/.htm/.shtml)?答案是:静态页面: 3.实现原理

关于分页SQL的小总结

findPage 和findPageTotal条件分页中的条件 较为复杂点的关联查询 有取别名的 <select id="findPage" resultMap="MinOrderInfo" parameterType="map"> SELECT o.*,w.name buyName,w.MOBILE buyMobile,aa.name sellName,aa.MOBILE sellMobile,rs.CAR_BRAND_NAME c

webform:分页组合查询

一个简单的分页组合查询页面 /// <summary> /// 查询方法 /// </summary> /// <param name="tsql">SQL语句</param> /// <param name="hh">哈希表</param> /// <returns></returns> public List<Goods> Select(string un

TODO:数据库优化之分页

本文的例子是以MongoDB数据库为准,其它数据库各位也可以举一反三进行优化. 在MongoDB中分页使用 a.skip(n)跳过前n个匹配的文档: b.limit(m)返回m个结果,要是匹配的结果不到m个,则返回匹配数据量的结果,m是指定上限数量,而不是下限数量: c.sort({"name": 1,"address":-1}),1表示升序,-1表示降序. 使用skip跳过少量的文档还可以.但是数据量非常多的话,skip就会变得非常慢,每个数据库都会有这种情况,所

WebForm 分页与组合查询

1.封装实体类 2.写查询方法 //SubjectData类 public List<Subject> Select(string name) { List<Subject> list = new List<Subject>(); cmd.CommandText = "select *from Subject where SubjectName like @a "; cmd.Parameters.Clear(); cmd.Parameters.Add

easymall项目的商品删除,前台商品分页,商品详情,购物车模块

简单的挑选一下昨天所学的重点知识模块,以备后续的复习 一.购物车模块1.1购物车两种实现的区别:!!!!!!!! 用session保存  缺点:浏览器关闭,session失效时保存在session中购物信息将会消失  后续优化,将购买的信息除了保存在session中以外,还要将购物的信息保存在cookie中,这样  就解决了浏览器关闭购买商品信息丢失的问题(但是解决不了跟换电脑信息丢失的问题)  优点:不用操作数据库,可以减少数据库访问压力 数据库中:  缺点:只用登录的用户才能添加购物车