jQuery插件实例六:jQuery 前端分页

先来看看效果:

对于前端分页,关键是思路,和分页算法。本想多说两句,可又觉得没什么可说的,看代码吧:

如何使用?

            $("#pging").zPagination({
                ‘navEvent‘:function(){
                    console.log(‘取数据Ajax‘);
                }
            });

JS代码

//分页Pagination
; (function ($, window) {
    var defaults = {
        rowCount: 400, //总数据行数
        navPage: 10, //每次显示多少页导航
        pageSize: 10, //每页多少条数据
        currentPage: 20, //当前是第几页
        showRowsCount: true, //是否显示总数据数
        showGoto: false, //是否有跳转功能
        navUrl: ‘‘, //点击页后所跳转到的URL,用于非Ajax()方式:/Home/Index.aspx?pageIndex=
        ajaxUrl: ‘‘, //点击页后从哪个URL取数据,用于Ajax()方式:/Home/Index
        isAjaxData: true, //是从Ajax取数据还是非Ajax取数据
        divClass: ‘z_paging‘, //外围DIV的Class,其下有.z_paging a , .z_paging a:hover , .z_paging>.z_paging_current
        navEvent: ‘‘//点击导航页后所要执行的事件function(){...},通常和isAjaxData==true联用。
    };
    $.fn.zPagination = function (options) {
        $this = $(this);
        var ops = $.extend({}, defaults, options);
        var _pageCount = 0;
        var _startNav = 0;
        var _endNav = 0;

        //初始化参数
        function initParameter() {
            _pageCount = (ops.rowCount % ops.pageSize == 0) ? ops.rowCount / ops.pageSize : parseInt(ops.rowCount / ops.pageSize) + 1;
            if (ops.currentPage <= parseInt(ops.navPage / 2)) {
                _startNav = 1;
            } else {
                _startNav = ops.currentPage - parseInt(ops.navPage / 2); //(30-(10/2)==25)
            }

            _endNav = _startNav + ops.navPage;
            if (_endNav > _pageCount) {
                _endNav = _pageCount;
                _startNav = _endNav - ops.navPage;
            }
            if (_startNav < 1) {
                _startNav = 1;
            }

            //生成DOM元素
            if (ops.isAjaxData == true) {
                generateAjaxDom();
            } else {
                generateDom();
            }
        };

        //网址方式加载数据 isAjaxData==false 时执行
        function generateDom() {
            $this.html(‘‘).addClass(ops.divClass);
            $(‘<a href=‘ + ops.navUrl + ‘1></a>‘).html(1).appendTo($this);
            _startNav++;
            if (_startNav != 2) {
                $(‘<span></span>‘).html(‘...‘).appendTo($this);
            }
            while (_startNav < _endNav) {
                $(‘<a href=‘ + ops.navUrl + _startNav + ‘></a>‘).html(_startNav).appendTo($this);
                _startNav++;
            }
            _startNav--;

            if (_endNav < _pageCount) {
                $(‘<span></span>‘).html(‘...‘).appendTo($this);
            }
            if (_startNav < _endNav && _endNav <= _pageCount) {
                $(‘<a href=‘ + ops.navUrl + _endNav + ‘></a>‘).html(_pageCount).appendTo($this);
            }
            findCurrentNum();
        }

        //通过Ajax方式加载数据 isAjaxData==true 时执行
        function generateAjaxDom() {
            $this.html(‘‘).addClass(ops.divClass);
            $(‘<a href="javascript:void(0);"></a>‘).html(1).appendTo($this);
            _startNav++;
            if (_startNav != 2) {
                $(‘<span></span>‘).html(‘...‘).appendTo($this);
            }
            while (_startNav < _endNav) {
                $(‘<a href="javascript:void(0);"></a>‘).html(_startNav).appendTo($this);
                _startNav++;
            }
            _startNav--;

            if (_endNav < _pageCount) {
                $(‘<span></span>‘).html(‘...‘).appendTo($this);
            }
            if (_startNav < _endNav && _endNav <= _pageCount) {
                $(‘<a href="javascript:void(0);"></a>‘).html(_pageCount).appendTo($this);
            }

            //给每个<a />添加事件
            function initAjaxData() {
                $this.find(‘a‘).bind(‘click‘, function () {
                    try {
                        ops.currentPage = parseInt($(this).html());
                        if (typeof (ops.navEvent) == ‘function‘) {
                            ops.navEvent();
                            initParameter(); //重新生成页数导航条,放在这里,放在这里,是为了避免因参数没传对,而出现看见导航页变了,而数据没变的情况
                        }
                    } catch (e) {

                    }
                });
            }
            initAjaxData();
            findCurrentNum();
        }

        //找出当前页
        function findCurrentNum() {
            $this.find(‘a‘).each(function () {
                if (parseInt($(this).html()) == ops.currentPage) {
                    $(this).addClass(‘z_paging_current‘);
                }
            });
            appendEle();
        }

        //附加元素 是否显示总数据数
        function appendEle() {
            if (typeof (ops.showRowsCount) == ‘boolean‘) {
                $(‘<span class="z_rows_count"></span>‘).html(‘总数:‘ + ops.rowCount).appendTo($this);
            }
        }

        initParameter();

        //获取当前是第几页 调用方式:this.currentPage
        this.currentPage = function () {
            return ops.currentPage();
        };

        return this;
    };
})(jQuery, window);

CSS

/*zPagination Begin*/
.z_paging
{
}
.z_paging a, .z_paging span
{
    float: left;
    display: inline-block;
    vertical-align: text-bottom;
    text-align: center;
    line-height: 34px;
    background-color: #fff;
}
.z_paging a
{
    cursor: pointer;
    border-radius: 3px;
    border: 1px solid #e5e5e5;
    padding: 0 12px;
    margin: 0 2px;
    text-decoration: none;
    color: #734ba9;
}
.z_paging a:hover
{
    background-color: #6699ff;
    color: #fff;
}
.z_paging > .z_paging_current
{
    background-color: #e5e5e5;
}
.z_paging > .z_rows_count
{
    border-radius: 3px;
    border: 1px solid #e5e5e5;
    padding: 0 12px;
    margin: 0 2px;
    text-decoration: none;
    color: #734ba9;
}
/*zPagination End*/
时间: 2024-08-02 10:54:50

jQuery插件实例六:jQuery 前端分页的相关文章

jQuery插件实例四:手风琴效果[无动画版]

手风琴效果就是内容的折叠与打开,在这个插件中,使用了三种数据来源:1.直接写在DOM结构中:2.将数据写在配置项中:3.从Ajax()中获取数据.在这一版中,各项的切换没有添加动画效果,在下一版中会是有动画效果的. 在这个插件中,CSS和JS的配置非常重要,需要特别注意.另外,加个思考,请先看完后再想这个问题:当点击其中某项时,给width直接添加animate是否合适,当快速在其上移动时,如何保证效果? 效果图预览 插件JS accordionB.js 1 ; 2 (function ($,

转:精美jQuery插件及源码 前端开发福利

原文来自于:http://www.html5tricks.com/pretty-jquery-plugin.html jQuery是一个非常不错的javascript框架,很多前端开发者喜欢的原因不仅是因为jQuery使用起来方便,更重要的是因为它的插件很多,我们可以将这些插件应用到自己的项目中去.下面这些精美的jQuery插件提供源代码下载,希望对你有所帮助. 1.jQuery自定义下拉框选择列表 5款炫酷样式 这是一款基于jQuery的自定义下拉框选择列表插件,利用这款jQuery插件我们可

转 jquery插件--241个jquery插件—jquery插件大全

241个jquery插件—jquery插件大全 jquery插件jqueryautocompleteajaxjavascriptcoldfusion jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多javascript高手加入其team. jQuery是继prototype之后又一个优秀的Javascrīpt框架.其经典的Slogan是“Write Less, Do more”(写更少的代码,做更多的事情).jQuery是轻量级的js库(压缩后只有21k) ,这是其它

精美jQuery插件及源码 前端开发福利

jQuery是一个非常不错的javascript框架,很多前端开发者喜欢的原因不仅是因为jQuery使用起来方便,更重要的是因为它的插件很多,我们可以将这些插件应用到自己的项目中去.下面这些精美的jQuery插件提供源代码下载,希望对你有所帮助. 1.jQuery自定义下拉框选择列表 5款炫酷样式 这是一款基于jQuery的自定义下拉框选择列表插件,利用这款jQuery插件我们可以非常方便的让浏览器默认的select下拉框变的非常华丽,并且同时拥有select下拉框原有的功能.这款jQuery下

JQUERY插件学习之jQuery UI

jQuery UI:http://jqueryui.com/ jQuery UI介绍: jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互.动画.特效和可更换主题的可视控件.我们可以直接用它来构建具有很好交互性的web应用程序.所有插件测试能兼容 IE 6.0+, Firefox 3+, Safari 3.1+, Opera 9.6+, 和 Google Chrome. 组件构成 jQuery UI 主要分为3个部分:交互.微件和效果

jQuery插件实例七:一棵Tree的生成史

在需要表示级联.层级的关系中,Tree作为最直观的表达方式常出现在组织架构.权限选择等层级关系中.典型的表现形试类似于: 一颗树的生成常常包括三个部分:1)数据库设计:2)后台程序:3)前端代码.那么,具体是怎么样的呢? 一.数据库设计 数据库设计对于树的表达常会包含这么几个类似意思的字段: parent_id.id.name. id:用于描述自己: parent_id:用于描述自己的上一级: name:用于描述自己的名称: 例如:总办(id=3,parent_id=0,name=总办),客户服

Jquery 插件 实例

先说明下应用场景,通过可配项的配置和默认项覆盖,获取指定的需求数据,填充到指定的位置(两个指定其实都是可配的) (function($) { $.fn.extend({ getOneNews: function(opt) { //获取单条新闻信息 var defaults = { newsId: "", }; var options = $.extend(defaults, opt); var _this = this; _this.html("<p style='te

使用jquery插件kkpager为页面添加分页

首先下载kkpager插件:https://github.com/pgkk/kkpager 1.将下载下来的js和css拷贝到项目中,在需要分页的页面引入kkpager插件所需的js和css,如下: <script type="text/javascript" src="js/kkpager.js"></script> <script type="text/javascript" src="js/jquer

CSS3 border-image详解、应用及jQuery插件

by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=518 一.border-image的兼容性border-image可以说是CSS3中的一员大将,将来一定会大放光彩,其应用潜力真的是非常的惊人.可惜目前支持的浏览器有限,仅Firefox3.5,chrome浏览器,Safari3+支持border-image.所以,就本文而言,IE浏览器可以回家休息了,Firefox3及