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

原来公司用的报表分页插件是C#编写的服务器插件,需要前后台交互,而且不支持ajax。

经过一段时间折腾,我编写了一个轻便的jquery分页插件,支持ajax。下面是插件代码

/*
插件名称:报表分页
作者:Keven

调用方法:
    1.在html报表下面增加<div class="pageInfo"></div>
    2. javascript代码 $(".pageInfo").PageInit();
    3.定义函数setResult,把json数据赋值到表格中
参数:
    url:数据请求地址
Ajax数据格式:
    json格式;需要返回分页数据,格式:"Page":{"TotalCount":"7","PageSize":"20"}
*/

; (function ($) {
    var PageNumber = 1;
    var PageSize = 1;
    var MaxPage = 1;
    var RequestUrl;

    //外部接口函数
    $.fn.extend({
        ‘PageInit‘: function (op) {
            if (op != undefined) {
                if (op.url != undefined) {
                    RequestUrl = op.url;
                }
                if (op.PageSize != undefined) {
                    PageSize = op.PageSize;
                }
            }
            if ($(this).html() == "") {
                var divLink = $(‘<div class="pageLink fl"></div>‘);
                with (divLink) {
                    append(‘<a href="#" class="PageFirst">首页</a>‘);
                    append(‘<a href="#" class="PagePre">上一页</a>‘);
                    append(‘<input type="number" class="PageNumber" value="1"/>‘);
                    append(‘<a href="#" class="PageNext">下一页</a>‘);
                    append(‘<a href="#" class="PageLast">尾页</a>‘);
                    append(‘<a href="#" class="PageGoto">跳转</a>‘);
                    find(‘a‘).before(‘<span class="split-left">[</span>‘);
                    find(‘a‘).after(‘<span class="split-right">]</span>‘);
                }
                $(this).append(divLink);
                $(this).append(‘<div class="page" style="float:right;margin-right:5px;">第<label class="PageNumber red"<label/>页<span class="split">|</span>共<label class="MaxPage red"<label/>页<span class="split">|</span>共<label class="TotalCount red"></label>条记录</div>‘);
            }
            InitEvent();
            Search(1);//首次加载时查询
        }
    });
    $.extend({
        ‘GetPageNumber‘: function () {
            return PageNumber;
        },
        ‘SetPageNumber‘: function (pagenumber) {
            PageNumber = pagenumber;
            Search();
        }
    });

    //通过Ajax获取后台JSON数据
    function Search() {
        if (RequestUrl == undefined) {
            return;
        }
        var vData = ‘pageNumber=‘ + PageNumber + "&" + $(‘#form1‘).serialize();
        if (PageSize > 1) {
            vData += "&PageSize=" + PageSize;
        }
        $.ajax({
            type: ‘POST‘,
            dataType: "text",
            ContentType: "application/json; charset=utf-8",
            url: RequestUrl,
            data: vData,
            success: function (result, status, xhr) {
                result = eval("(" + result + ")");
                //页码信息
                $(‘input.PageNumber‘).val($.GetPageNumber());
                PageSize = result.Page.PageSize;
                TotalCount = result.Page.TotalCount;
                MaxPage = Math.ceil(TotalCount / PageSize);
                $(‘.TotalCount‘).text(TotalCount);
                $(‘.MaxPage‘).text(MaxPage);
                $(‘label.PageNumber‘).text(PageNumber);
                //表格信息
                setResult(result);
            },
            error: function (err, A, B) {
            }
        });
    };

    //初始化事件
    function InitEvent() {
        //点击【首页】
        $(‘.PageFirst‘).on(‘click‘, function () {
            PageNumber = 1;
            Search();
        });
        //点击【上一页】
        $(‘.PagePre‘).on(‘click‘, function () {
            if (PageNumber > 1) {
                PageNumber -= 1;
                Search();
            }
        });
        //点击【下一页】
        $(‘.PageNext‘).on(‘click‘, function () {
            if (PageNumber < MaxPage) {
                PageNumber += 1;
                Search();
            }
        });
        //点击【末页】
        $(‘.PageLast‘).on(‘click‘, function () {
            PageNumber = MaxPage;
            Search();
        });
        //点击【跳转】
        $(‘.PageGoto‘).on(‘click‘, function () {
            var p = $(‘input.PageNumber‘).val();
            if (!isNaN(p) && p!="") {
                PageNumber = parseInt(p);
                Search();
            }
        });
    };

})(jQuery);

首先需要在报表下面编写一个div

<div class="pageInfo"></div>

用到的CSS:

.pageInfo {
    margin-top: 3px;
}

    .pageInfo .PageNumber {
        width: 80px;
        vertical-align: middle;
    }

.split-left {
    margin-left: 5px;
}

.split-right {
    margin-right: 5px;
}

.split {
    margin: 10px;
}

.pageInfo a {
    text-decoration: none;
    font-size: 12px;
    margin: 2px;
}
.hidden {
    display:none;
}
.fl {
    float:left;
    display:inline;
}
.fr {
    float:right;
    display:inline;
}

然后在js代码中调用

$(function(){

$(".pageInfo").PageInit({ url: ‘../BLL/GetReportData.ashx‘ });

});

上效果图:

时间: 2024-10-03 22:29:04

动手编写插件-javascript分页插件的相关文章

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

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

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

上一篇测试版的代码我们发现了很多问题,在这一版本中我们将解决.上一版的连接地址:封装javascript分页插件——测试版 最主要的就是修改核心方法: function initTag() { pageModel.$element.html("") var pageTagDynamic = ""; if (pageModel.pageCountTag >= pageModel.pageCount) { pageModel.pageCountTag = page

PageHelper分页插件及通用分页js

 分页概述 1.物理分页 物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit关键字,程序员只需要编写带有limit关键字的SQL语句,数据库返回的就是分页结果.建议使用. 2.逻辑分页 逻辑分页依赖的是程序员编写的代码.数据库返回的不是分页结果,而是全部数据,然后再由程序员通过代码获取分页数据,常用的操作是一次性从数据库中查询出全部数据并存储到List集合中,因为List集合有序,再根据索引获取指定范围的数据. MyBatis 分页插件 - PageHel

Mybatis分页插件

Mybatis分页插件 - PageHelper说明 如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件. 该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页. 点击提交BUG 版本说明 最新版本为3.7.5 PageInfo中的judgePageBoudary方法修改: isLastPage = pageNum == pages && pageNum != 1; //改为 isLastPage

MyBatis学习总结_17_Mybatis分页插件PageHelper

如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件. 分页插件支持任何复杂的单表.多表分页,部分特殊情况请看重要提示. 想要使用分页插件?请看如何使用分页插件. 物理分页 该插件目前支持以下数据库的物理分页: Oracle Mysql MariaDB SQLite Hsqldb PostgreSQL DB2 SqlServer(2005,2008) Informix H2 SqlServer2012 配置dialect属性时,可以使用小写形式: Oracle,MySQL

MyBatis学习总结(17)——Mybatis分页插件PageHelper

如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件. 分页插件支持任何复杂的单表.多表分页,部分特殊情况请看重要提示. 想要使用分页插件?请看如何使用分页插件. 物理分页 该插件目前支持以下数据库的物理分页: Oracle Mysql MariaDB SQLite Hsqldb PostgreSQL DB2 SqlServer(2005,2008) Informix H2 SqlServer2012 配置dialect属性时,可以使用小写形式: oracle,mysql

springboot + mybatis配置分页插件

1:首先配置springboot +mybatis框架  参考:http://www.cnblogs.com/liyafei/p/7911549.html 2:创建配置类MybatisConfig,对分页插件进行配置.将mybatis-config.xml移动到classpath路径下. package com.liyafei.util.pagehelper; import java.util.Properties; import org.apache.ibatis.plugin.Interce

Mybatis分页插件PageHelper简单使用

1. 引入分页插件 引入分页插件有下面2种方式,推荐使用 Maven 方式. 1). 引入 Jar 包 你可以从下面的地址中下载最新版本的 jar 包 https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/ http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/ 由于使用了sql 解析工具,你还需要下载

MyBatis 分页插件 PageHelper(转)

如何使用分页插件 . 1. 引入分页插件 2. 配置拦截器插件 3. 如何在代码中使用 4. MyBatis 和 Spring 集成示例 5. Spring Boot 待定 使用方法 1. 引入分页插件 引入分页插件有下面2种方式,推荐使用 Maven 方式. 1). 引入 Jar 包 你可以从下面的地址中下载最新版本的 jar 包 https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pageh