jQuery 分页 + Twitter Bootstrap

2023-11-26

我正在尝试修改 Jquery 分页(基于这个 Jquery 分页教程 - demo)与很棒的 twitter bootstrap 一起工作。

Twitter Bootstrap 的标准分页设置如下所示,因此这就是分页输出结构的目标。

<div class="pagination">
    <ul>
        <li class="prev disabled"><a href="#">&larr; Previous</a></li>
        <li class="active"><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
        <li><a href="#">4</a></li>
        <li><a href="#">5</a></li>
        <li class="next"><a href="#">Next &rarr;</a></li>
    </ul>
</div>

到目前为止,我可以通过更改 html 输出结构来使其工作,但主动突出显示无法正常工作,因为我更改了输出<a> to the <li> tag.

这就是我现在 ATM 被困的地方!

我还需要做以下事情:

  • Disable prev按钮,当在第一页时
  • 更改活动<li>当页面改变时
  • Disable next位于最后一页时的按钮
  • Fix the prev按钮,这样它就可以再次工作了
  • 修复下一个按钮,使其再次可用

这是链接到JsFiddle - 不知何故它不起作用,但代码应该是正确的(与此相同的代码)


这是标准的 jQuery.pagination 库,我已对其进行修改以使用 twitter bootstrap。

创建div-

<div id="myPager" class="pagination"></div>

then

$('#myPager').pagination(100,{callback:function(page,component){
    console.info(page);
}})

这是库的代码。

jQuery.fn.pagination = function(maxentries, opts){
    opts = jQuery.extend({
        items_per_page:10,
        num_display_entries:10,
        current_page:0,
        num_edge_entries:0,
        link_to:"javascript:void(0)",
        first_text:"First",
        last_text:"Last",
        prev_text:"Prev",
        next_text:"Next",
        ellipse_text:"...",
        prev_show_always:true,
        next_show_always:true,
        callback:function(){return false;}
    },opts||{});

    return this.each(function() {
        /**
         * Calculate the maximum number of pages
         */
        function numPages() {
            return Math.ceil(maxentries/opts.items_per_page);
        }

        /**
         * Calculate start and end point of pagination links depending on 
         * current_page and num_display_entries.
         * @return {Array}
         */
        function getInterval()  {
            var ne_half = Math.ceil(opts.num_display_entries/2);
            var np = numPages();
            var upper_limit = np-opts.num_display_entries;
            var start = current_page>ne_half?Math.max(Math.min(current_page-ne_half, upper_limit), 0):0;
            var end = current_page>ne_half?Math.min(current_page+ne_half, np):Math.min(opts.num_display_entries, np);
            return [start,end];
        }

        /**
         * This is the event handling function for the pagination links. 
         * @param {int} page_id The new page number
         */
        function pageSelected(page_id, evt){
            current_page = page_id;
            drawLinks();
            var continuePropagation = opts.callback(page_id, panel);
            if (!continuePropagation) {
                if (evt.stopPropagation) {
                    evt.stopPropagation();
                }
                else {
                    evt.cancelBubble = true;
                }
            }
            return continuePropagation;
        }

        /**
         * This function inserts the pagination links into the container element
         */
        function drawLinks() {
            panel.empty();
            var list = jQuery("<ul></ul>");
            panel.append(list);

            var interval = getInterval();
            var np = numPages();
            // This helper function returns a handler function that calls pageSelected with the right page_id
            var getClickHandler = function(page_id) {
                return function(evt){ return pageSelected(page_id,evt); }
            }
            // Helper function for generating a single link (or a span tag if it's the current page)
            var appendItem = function(page_id, appendopts){
                page_id = page_id<0?0:(page_id<np?page_id:np-1); // Normalize page id to sane value
                appendopts = jQuery.extend({text:page_id+1, classes:""}, appendopts||{});
                if(page_id == current_page){
                    var clazz = appendopts.side ? 'disabled' : 'active';
                    var lstItem = jQuery("<li class='"+clazz+"'><a>"+(appendopts.text)+"</a></li>")
                }
                else
                {
                    var a = jQuery("<a>"+(appendopts.text)+"</a>")
                        .attr('href', opts.link_to.replace(/__id__/,page_id));;
                    var lstItem = jQuery("<li></li>")
                        .bind("click", getClickHandler(page_id));
                    lstItem.append(a);
                }
                if(appendopts.classes){lstItem.addClass(appendopts.classes);}
                list.append(lstItem);
            }
            // Generate "Previous"-Link
            if(opts.prev_text && (current_page > 0 || opts.prev_show_always)){
                appendItem(0, { text: opts.first_text, side: true });
                appendItem(current_page-1,{text:opts.prev_text, side:true});
            }
            // Generate starting points
            if (interval[0] > 0 && opts.num_edge_entries > 0)
            {
                var end = Math.min(opts.num_edge_entries, interval[0]);
                for(var i=0; i<end; i++) {
                    appendItem(i);
                }
                if(opts.num_edge_entries < interval[0] && opts.ellipse_text)
                {
                    jQuery("<li class='disabled'>"+opts.ellipse_text+"</li>").appendTo(list);
                }
            }
            // Generate interval links
            for(var i=interval[0]; i<interval[1]; i++) {
                appendItem(i);
            }
            // Generate ending points
            if (interval[1] < np && opts.num_edge_entries > 0)
            {
                if(np-opts.num_edge_entries > interval[1]&& opts.ellipse_text)
                {
                    jQuery("<li class='disabled'>"+opts.ellipse_text+"</li>").appendTo(list);
                }
                var begin = Math.max(np-opts.num_edge_entries, interval[1]);
                for(var i=begin; i<np; i++) {
                    appendItem(i);
                }

            }
            // Generate "Next"-Link
            if(opts.next_text && (current_page < np-1 || opts.next_show_always)){
                appendItem(current_page+1,{text:opts.next_text, side:true});
                appendItem(np - 1, { text: opts.last_text, side: true });
            }
        }

        // Extract current_page from options
        var current_page = opts.current_page;
        // Create a sane value for maxentries and items_per_page
        maxentries = (!maxentries || maxentries < 0)?1:maxentries;
        opts.items_per_page = (!opts.items_per_page || opts.items_per_page < 0)?1:opts.items_per_page;
        // Store DOM element for easy access from all inner functions
        var panel = jQuery(this);
        // Attach control functions to the DOM element 
        this.selectPage = function(page_id){ pageSelected(page_id);}
        this.prevPage = function(){ 
            if (current_page > 0) {
                pageSelected(current_page - 1);
                return true;
            }
            else {
                return false;
            }
        }
        this.nextPage = function(){ 
            if(current_page < numPages()-1) {
                pageSelected(current_page+1);
                return true;
            }
            else {
                return false;
            }
        }
        // When all initialisation is done, draw the links
        drawLinks();
        // call callback function
        //opts.callback(current_page, this);
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery 分页 + Twitter Bootstrap 的相关文章

随机推荐

  • 被 FoldLeft 错误困惑(在 Eclipse 和 REPL 中)

    其背景非常简单 我的假设基于 Odersky 的书 Programming in Scala 2nd Edition 第 8 5 节描述了 占位符语法 我有一个 List List Boolean 即矩形位图 我试图在其中计算值 true
  • 什么是自动覆盖索引?

    使用时EXPLAIN QUERY PLAN在 SQLite 3 中 它有时会给我输出 例如 SEARCH TABLE staff AS s USING AUTOMATIC COVERING INDEX is freelancer AND s
  • 如何将图像和录制文件保存在临时目录中?

    我想将从我的应用程序中拍摄的相机照片和视频录制存储在临时目录中的单独文件夹中一段时间 当任务完成时 他们将保存到数据库中 如何将从相机和视频录制文件中拍摄的图片保存在临时目录中的单独文件夹中 您正在寻找这个来访问缓存文件夹来存储临时文件 N
  • R:ggfortify:“自动绘图不支持 prcomp 类型的对象”

    我正在尝试使用 ggfortify 来可视化我使用 prcomp 所做的 PCA 结果 示例代码 iris pca lt iris c 1 2 3 4 autoplot prcomp iris pca 错误 自动绘图不支持 prcomp 类
  • JPA Hibernate n+1 问题(Lazy 和 Eager Diff)

    我试图理解 n 1 问题 从而找到正确的解决方案 我有两个实体 公司 Entity Table name company public class Company implements Serializable private static
  • 以最小总距离连接所有点的算法

    我有一组点和适用于每对点的距离函数 我想将所有点连接在一起 总距离最小 你知道我可以使用的现有算法吗 每个点都可以链接到几个点 所以这不是通常的 推销员行程 问题 Thanks 你想要的是一个最小生成树 生成一个最常见的两种算法是 Prim
  • List 是否有协变可变版本?

    我已经将我真正想要注释的代码简化为这个最小版本 def print it numbers or nones for i number in enumerate numbers or nones if number is None numbe
  • 通过浏览器上传大文件(100 GB)

    有没有办法上传大文件 超过 80 GB 通过网络浏览器 以前我一直使用 plupload 上传文件 img png jpg 但它似乎不适用于较大的文件 我还想知道如何实现一个用户可以上传的网页 例如 Mega co nz 或 Drive g
  • context:annotation-config 是 @AutoWired 的替代品吗?

    我可以这样说吗 context annotation config在我的 XML 配置中 它会自动注入 bean 类而不需要任何注释 因此 不要使用这些注释类型 public class Mailman private String nam
  • Flask-Restless 转储 Flask-Sqlalchemy 中的十进制值

    我有这个使用 Flask SQLAlchemy 的模型 class Menu Document db Model id db Column db Integer primary key True autoincrement True nam
  • 如何通过home-brew m1 mac安装anaconda

    我刚买了一台 m1 Mac 并使用 home brew 安装了 anaconda brew install anaconda 看起来它工作得很好 除了当我真正去使用 anaconda 并输入 conda 时 我得到了可怕的 conda 命令
  • 在 Python 中求解具有时滞的 ODE

    任何人都可以给我一些建议 如何解决Python中实现了时间延迟的ODE 我似乎无法弄清楚如何使用 scipy integrate odeint 来做到这一点 我正在寻找的内容应该如下所示 the constants in the equat
  • 如何在控件中嵌入 firemonkey 表单?

    我尝试在滚动框中嵌入表单 procedure TfrmMain FormCreate Sender TObject var Control TControlView begin Control TControlView Create Sel
  • 用 Emacs 替换正则表达式

    我正在尝试做一个搜索并用正则表达式替换 假设我有一个foreach foo1 txt foo2 txt foo3 txt foo4 txt 我想在列表中的每个项目周围加上 我认为 从文档 这个正则表达式可以工作 foo 1 4 txt gt
  • glmnet 如何计算最大 lambda 值?

    The glmnet包使用了一系列LASSO调整参数lambda从最大缩放lambda max在此情况下不选择预测变量 我想知道如何glmnet计算这个lambda max价值 例如 在一个简单的数据集中 set seed 1 librar
  • 如何使用正则表达式前瞻来限制输入字符串的总长度

    我有这个正则表达式 想要添加限制总长度不超过 15 个字符的规则 我看到了一些前瞻示例 但它们不太清楚 你能帮我修改这个表达式以支持新规则吗 A Z A Z 既然您在标题中提到了这一点 那么对您的案例的负面展望将是 16 regex goe
  • Ruby 中重做和重试语句的用途是什么?

    我能想到的唯一用例redo适用于写入套接字或从数据库读取等操作 但如果这些操作失败一次 后续尝试很可能也会失败 所以对我来说这仍然有点毫无意义 至于retry我真的想不出它会有什么用处 这对我来说似乎毫无意义 因为我不知道也不使用 Ruby
  • CanExecuteCommand 对性能有影响吗?

    使用 ICommand 对象的 CanExecuteCommand 对性能有何影响 该方法是否一遍又一遍地执行 我需要迭代大约 200 个对象的集合 根据这些对象决定是否应启用绑定到命令的按钮 CanExecuteCommand 是否会重复
  • 使用 JNA 的 C 回调使 JRE 崩溃

    我在 JNA 中处理回调时遇到问题 我正在尝试使用 C API 它使用回调来处理多个会话事件 登录 注销 连接问题 会话对象 称为sp session 是一个不透明的结构 所有回调都注册在sp session callbacks结构 根据
  • jQuery 分页 + Twitter Bootstrap

    我正在尝试修改 Jquery 分页 基于这个 Jquery 分页教程 demo 与很棒的 twitter bootstrap 一起工作 Twitter Bootstrap 的标准分页设置如下所示 因此这就是分页输出结构的目标 div cla