封装javascript分页插件——可以使用的测试版(β版)

上一篇测试版的代码我们发现了很多问题,在这一版本中我们将解决。上一版的连接地址:封装javascript分页插件——测试版

最主要的就是修改核心方法:

function initTag() {
    pageModel.$element.html("")
    var pageTagDynamic = "";
    if (pageModel.pageCountTag >= pageModel.pageCount) {
        pageModel.pageCountTag = pageModel.pageCount
    }
    var start = 3;
    var end = pageModel.pageCountTag - 2;

    if (pageModel.pageIndex != 1) {
        start = pageModel.pageIndex - 2 >= 4 ? pageModel.pageIndex - 2 : 3
        end = pageModel.pageIndex + 3 <= pageModel.pageCount - 2 ? pageModel.pageIndex + 3 : pageModel.pageCount - 2
        if (end < pageModel.pageCountTag - 2) {
            end = pageModel.pageCountTag - 2;
        }
        if (start > pageModel.pageCount - 7) {
            start = pageModel.pageCount - 7;
        }
    }
    for (var i = start; i <= end; i++) {
        pageTagDynamic += stringFormat(pageModel.pageTagTemplate, "page", i, i, i);
    }
    pageModel.$element.append(pageTagDynamic);
    //增加两侧非点击的间隔符
    AddFirstOrLast(start != 3, end != pageModel.pageCount - 2)
    //增加上一页和下一页的标签
    AddPreviousOrNext();
    //设置当前页标签样式
    signCurrentPage();
}

分页的核心方法

在核心方法之中我更换了思考方式:循环的主体不在是所有的分页标签,因为当定位在中间页的时候,有可能会出现两个不可点击的分隔标签。在加上首页和末叶的标签。我们一共要在循环主体内排除4个标签,分别是第一页,第二页,最后一页,最后第二页

所以循环的起始和结束索引就是start和end

if (pageModel.pageCountTag >= pageModel.pageCount) {

  //保证总页数较少的时候循环总体就是总页数
  pageModel.pageCountTag = pageModel.pageCount
}
var start = 3;
var end = pageModel.pageCountTag - 2;

//当前页定位不是首页的时候

if (pageModel.pageIndex != 1) {

  //确定循环的起始和结束索引
  start = pageModel.pageIndex - 2 >= 4 ? pageModel.pageIndex - 2 : 3
  end = pageModel.pageIndex + 3 <= pageModel.pageCount - 2 ? pageModel.pageIndex + 3 : pageModel.pageCount - 2

  //当前页过小时对结束索引的补齐
  if (end < pageModel.pageCountTag - 2) {
  end = pageModel.pageCountTag - 2;
  }

  //当前页过大时对开始索引的补齐
  if (start > pageModel.pageCount - 7) {
  start = pageModel.pageCount - 7;
  }
}

//循环的核心代码

for (var i = start; i <= end; i++) {
  pageTagDynamic += stringFormat(pageModel.pageTagTemplate, "page", i, i, i);
}

function AddFirstOrLast(existLeftDot, existRightDot) {
    //在此方法运行是,当前页面已经存在生成好的标签元素
    var previous = pageModel.$element.children().first();
    var next = pageModel.$element.children().last();
    //增加第一页标签
    $(stringFormat(pageModel.pageTagTemplate, "page", 1, 1, 1)).insertBefore(previous);
    //增加最后一页标签
    $(stringFormat(pageModel.pageTagTemplate, "page", pageModel.pageCount, pageModel.pageCount, pageModel.pageCount)).insertAfter(next);
    if (existLeftDot) {
        $(pageModel.pageDotTag).insertBefore(previous)
    }
    else {
        $(stringFormat(pageModel.pageTagTemplate, "page", 2, 2, 2)).insertBefore(previous);
    }
    if (existRightDot) {
        $(pageModel.pageDotTag).insertAfter(next)
    }
    else {
        $(stringFormat(pageModel.pageTagTemplate, "page", pageModel.pageCount - 1, pageModel.pageCount - 1, pageModel.pageCount - 1)).insertAfter(next);
    }
}

增加两侧非点击的间隔符

AddFirstOrLast(start != 3, end != pageModel.pageCount - 2)

参数是两个bool类型,我们之前提到过循环的主体内排除4个标签,分别是第一页,第二页,最后一页,最后第二页。

所以在这里我们要把排除的标签加回来,那么,判定如果存在第三页,那么就增加第二页,不存在,就增加不可点击的分隔标签,末页也是同理

这样分页导航基本上就已经完成了

function AddPreviousOrNext() {
    var previous = pageModel.$element.children().first();
    var next = pageModel.$element.children().last();
    if (pageModel.pageIndex != 1) {
        $(pageModel.pageLastTag).insertBefore(previous);
    }
    if (pageModel.pageIndex != pageModel.pageCountTag) {
        $(pageModel.pageNextTag).insertAfter(next);
    }
}

上一页和下一页

function signCurrentPage() {
    $("#page-" + pageModel.pageIndex).addClass("pageSelected");
}

添加当前页样式

    <style>
        label {
            margin: 10px;
        }

        .pageSelected a,
        .page a {
            text-decoration: none;
        }

        .page a {
            color: black;
        }

        .pageSelected a {
            color: blueviolet;
        }
    </style>

样式表

时间: 2024-12-12 13:56:50

封装javascript分页插件——可以使用的测试版(β版)的相关文章

自制Javascript分页插件,支持AJAX加载和URL带参跳转两种初始化方式,可用于同一页面的多个分页和不同页面的调用

闲话部分 最近闲着实在无聊,就做了点小东西练练手,由于原来一直在用AspNetPager进行分页,而且也进行了深度的定制与原有系统整合的也不错,不过毕竟是用别人的,想着看自己能试着做出来不能,后台的分页插件已经有比较成熟的了,那就自己试着写一个前台分页吧. 话不多说,先上效果图: 优点与缺点 来说说优缺点吧,首先AspNetPager是后台分页控件,所以在向客户端回传HTML文档之前生成HTML阶段 就会把分页代码生成完毕,然后回传,而JS是前端代码,就是HTML文档在服务器组织完毕往客户端传送

动手编写插件-javascript分页插件

原来公司用的报表分页插件是C#编写的服务器插件,需要前后台交互,而且不支持ajax. 经过一段时间折腾,我编写了一个轻便的jquery分页插件,支持ajax.下面是插件代码 /* 插件名称:报表分页 作者:Keven 调用方法: 1.在html报表下面增加<div class="pageInfo"></div> 2. javascript代码 $(".pageInfo").PageInit(); 3.定义函数setResult,把json数据

【JavaScript 封装库】BETA 4.0 测试版发布!

1 /* 2 源码作者: 石不易(Louis Shi) 3 联系方式: http://www.shibuyi.net 4 =================================================================================================== 5 程序名称: JavaScript 封装库 BETA 4.0 版 6 迭代版本: BETA 3.0 7 插件总数: 12 个 8 库方法数: 26 个 9 功能总数: 67 个

【JavaScript 封装库】BETA 3.0 测试版发布!

1 /* 2 源码作者: 石不易(Louis Shi) 3 联系方式: http://www.shibuyi.net 4 =================================================================================================== 5 程序名称: JavaScript 封装库 BETA 3.0 版 6 迭代版本: BETA 2.0 7 插件总数: 8 个 8 库方法数: 20 个 9 功能总数: 48 个

JQuery分页插件封装(源码来自百度,自己封装)

最近由于项目的需要,做了一个基于JQuery的表格分页插件封装,部分源码来源百度,经由自己封装完成. 下面是具体代码和说明,仅供参考.第一步可以先将我的HTML,CSS,JS这三部分的代码创建好后先运行看看,下图是文件目录展示. html <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <

【JavaScript 封装库】BETA 2.0 测试版发布!

1 /* 2 源码作者: 石不易(Louis Shi) 3 联系方式: http://www.shibuyi.net 4 =================================================================================================== 5 程序名称: JavaScript 封装库 BETA 2.0 版 6 迭代版本: BETA 1.0 7 功能总数: 50 个 8 新增总数: 6 个 9 删除总数: 0 个 1

【JavaScript 封装库】BETA 1.0 测试版发布!

1 /* 2 源码作者: 石不易(Louis Shi) 3 联系方式: http://www.shibuyi.net 4 =================================================================================================== 5 程序名称: JavaScript 封装库 BETA 1.0 版 6 迭代版本: Prototype 7 功能总数: 44 个 8 新增总数: 30 个 9 删除总数: 0 个

原生js版分页插件

之前我在自己的博客里发表了一篇用angularJs自定义指令实现的分页插件,今天简单改造了一下,改成了原生JavaScript版本的分页插件,特此记录下来.如有不足之处,欢迎指出. 本插件可以实现的功能: 1. 可初始化每页条数,以及重新选择每页条数 2.自定义首末页.上下页按钮的显示内容(是:<<.  >>.  < .  >    还是:首页.末页.上一页.下一页) 3.设置当前页在一定范围时,是否显示省略号按钮 4.自定义当前页按钮与省略号按钮之间显示的数字按钮的个

关于JQ分页插件的封装

一.简介 剧情需要,找遍网络没找到合适的,由此想自己封装一个,主要是思路问题,理清思路很重要,这里我的思路采用了一个稍微简单的. 二.代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>分页插件</title> </head> <style type="text/css"> .box{ disp