jQuery从零开始做一个分页组件功能示例

下面我将详细讲解“jQuery从零开始做一个分页组件功能示例”的完整攻略:

1. 概述

分页功能是前端开发中常用的功能之一,利用它可以将大量的数据分页显示。而jQuery是一款优秀的JavaScript库,它可以极大地简化我们开发的工作量。在这个示例中,我们将用jQuery来实现一个简单的分页组件。

2. 实现步骤

2.1 HTML结构

首先我们需要先创建一个基本的HTML结构,用于显示分页列表和相关数据。示例中我们将分页组件显示在id为“pagination”的元素内部,结构如下:

<div id="pagination">
  <ul class="pagination-list"></ul>
  <div class="pagination-info"></div>
</div>

其中,.pagination-list用于显示分页按钮,.pagination-info用于显示相关信息,如当前页数、总条数等。

2.2 初始化参数

在我们开始编写jQuery代码之前,需要先确定一些参数,如每页显示的数量、起始页码等。在这个示例中,我们假定每页显示10条,起始页码为1。

var pageSize = 10; // 每页显示数量
var currentPage = 1; // 当前页码
var totalPage = 0; // 总页数
var totalRecord = 0; // 总记录数

2.3 发送AJAX请求

将要分页显示的数据存储到服务端,我们需要先通过AJAX请求获取数据。这里我们假定服务端返回的数据格式如下:

{
  "total": 50, // 总记录数
  "list": [{}, {}, ...] // 当前页的记录
}

请求示例:

$.ajax({
  url: '/list',
  type: 'GET',
  data: {
    page: currentPage,
    pageSize: pageSize
  },
  success: function(data) {
    // 处理数据
  }
});

2.4 处理数据

在成功获取数据之后,我们需要对数据进行处理,计算总记录数及总页数,并填充到HTML结构中相应的位置。

totalRecord = data.total; // 总记录数
totalPage = Math.ceil(totalRecord / pageSize); // 总页数
$('.pagination-info').text(`共 ${totalRecord} 条记录,共 ${totalPage} 页`);

2.5 渲染分页按钮

计算完成总页数之后,我们需要根据当前页码和总页数渲染出分页按钮。在这个示例中,我们使用for循环来生成分页按钮。

var html = '';
var start = 1;
var end = totalPage;

if(totalPage > 10) {
  if(currentPage > 5) {
    start = currentPage - 4;
  }

  if(currentPage < totalPage - 4) {
    end = currentPage + 4;
  }

  if(currentPage <= 5) {
    end = 10;
  }

  if(currentPage >= totalPage - 4) {
    start = totalPage - 9;
  }
}

for(var i=start; i<=end; i++) {
  if(i == currentPage) {
    html += `<li class="active">${i}</li>`;
  } else {
    html += `<li>${i}</li>`;
  }
}

$('.pagination-list').html(html);

2.6 绑定事件

在渲染完成分页按钮之后,我们需要添加事件监听,以便用户点击按钮时能够触发相应的操作。在这个示例中,我们添加了两个事件:

  1. 点击分页按钮,切换当前页码并重新渲染分页按钮。
  2. 点击首页、上一页、下一页、尾页按钮,同样切换当前页码并重新渲染分页按钮。

事件示例:

// 点击分页按钮
$('.pagination-list').on('click', 'li', function() {
  var page = parseInt($(this).text());
  if(isNaN(page)) return false;
  currentPage = page;
  renderPage();
});

// 点击首页、上一页、下一页、尾页按钮
$('.pagination-info').on('click', 'a', function() {
  var action = $(this).data('action');
  switch(action) {
    case 'first':
      currentPage = 1;
      break;
    case 'prev':
      currentPage = currentPage > 1 ? currentPage - 1 : currentPage;
      break;
    case 'next':
      currentPage = currentPage < totalPage ? currentPage + 1 : currentPage;
      break;
    case 'last':
      currentPage = totalPage;
      break;
    default:
      break;
  }
  renderPage();
});

2.7 重新渲染分页按钮

最后,我们需要封装一个函数renderPage(),对分页按钮进行重新渲染。

function renderPage() {
  $.ajax({
    url: '/list',
    type: 'GET',
    data: {
      page: currentPage,
      pageSize: pageSize
    },
    success: function(data) {
      totalRecord = data.total;
      totalPage = Math.ceil(totalRecord / pageSize);
      $('.pagination-info').text(`共 ${totalRecord} 条记录,共 ${totalPage} 页`);

      var html = '';
      var start = 1;
      var end = totalPage;

      if(totalPage > 10) {
        if(currentPage > 5) {
          start = currentPage - 4;
        }

        if(currentPage < totalPage - 4) {
          end = currentPage + 4;
        }

        if(currentPage <= 5) {
          end = 10;
        }

        if(currentPage >= totalPage - 4) {
          start = totalPage - 9;
        }
      }

      for(var i=start; i<=end; i++) {
        if(i == currentPage) {
          html += `<li class="active">${i}</li>`;
        } else {
          html += `<li>${i}</li>`;
        }
      }

      $('.pagination-list').html(html);
    }
  });
}

3. 示例说明

3.1 分页列表样式

这个示例中分页列表的样式比较简单,只是以普通列表的方式展现。如果需要改变分页列表的样式,可以使用CSS来进行样式的调整。

.pagination-list {
  margin: 0;
  padding: 0;

  li {
    display: inline-block;
    padding: 5px 10px;
    margin-right: 5px;
    border: 1px solid #ccc;
    cursor: pointer;

    &.active {
      background: #fff;
      border-color: #666;
    }
  }
}

3.2 优化分页按钮数量

在渲染分页按钮时,如果总页数太多,则会导致分页按钮过多而显得臃肿。为了解决这个问题,我们可以限制每次最多显示10个分页按钮,并根据当前页码来动态调整展现的分页按钮。如下所示:

var start = 1;
var end = totalPage;

if(totalPage > 10) {
  if(currentPage > 5) {
    start = currentPage - 4;
  }

  if(currentPage < totalPage - 4) {
    end = currentPage + 4;
  }

  if(currentPage <= 5) {
    end = 10;
  }

  if(currentPage >= totalPage - 4) {
    start = totalPage - 9;
  }
}

for(var i=start; i<=end; i++) {
  if(i == currentPage) {
    html += `<li class="active">${i}</li>`;
  } else {
    html += `<li>${i}</li>`;
  }
}

这样就可以保证分页按钮的数量不会过多,同时又能满足用户的需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery从零开始做一个分页组件功能示例 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • jQuery on()方法使用技巧详解

    jQuery on()方法使用技巧详解 jquery的on()方法是DOM元素的事件委托方法,其语法如下: $(selector).on(event,childSelector,data,function) 其中: selector:指定需要绑定事件的DOM对象 event:指定需要绑定的事件类型,如click、mouseover等等 childSelect…

    jquery 2023年5月27日
    00
  • jQuery Mobile Page bindRemove()方法

    jQuery Mobile是一款为移动设备优化的JavaScript框架,可以帮助开发者构建漂亮的移动Web应用。其中,bindRemove()方法是jQuery Mobile框架提供的一个页面绑定方法,用于绑定一个页面删除事件,以便在页面删除时执行相应的操作。本篇文章将详细讲解bindRemove()方法的完整攻略,包括方法的参数、示例用法、注意事项等内容…

    jquery 2023年5月12日
    00
  • jQWidgets jqxDropDownButton destroy()方法

    jQWidgets jqxDropDownButton destroy()方法 jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI件和工具,包括表格、日历、下拉菜单等。jqxDropDownButton是jQWidgets中的一个组件,用于创建下拉菜单按钮。destroy()方法是jqxDropDownButton中的一个方法,用于销毁下…

    jquery 2023年5月9日
    00
  • Ajax跨域问题及解决方案(jsonp,cors)

    Ajax跨域问题及解决方案(jsonp,cors) 在浏览器中发起Ajax请求时,出现“跨域问题(Cross-origin)”是非常常见的问题,这种情况下请求会被浏览器拦截,通过一系列解决方案才能够得以解决。我们将在下文中详细地探讨跨域问题以及两个常见的解决方案——JSONP和CORS。 什么是跨域问题? 跨域问题指的是浏览器限制脚本发起的跨域HTTP请求。…

    jquery 2023年5月28日
    00
  • JS实现table表格内针对某列内容进行即时搜索筛选功能

    实现table表格内针对某列内容进行即时搜索筛选功能的攻略包括以下几个步骤: HTML结构设计 在设计HTML表格结构时,需要为搜索功能留出位置。可以在表格上方添加一个输入框,用户在输入框中输入筛选条件,表格会根据输入内容筛选匹配的数据。 例如: <div> <label for="filter">搜索:</…

    jquery 2023年5月27日
    00
  • Underscore.js _.reject函数

    Underscore.js是一个实用的JavaScript函数工具库,提供了许多函数操作和工具,帮助我们更容易地操作JavaScript数据。其中,_.reject是其中一个非常实用的函数,可以对集合(collection)数据类型进行过滤操作。 一、函数介绍 _.reject(list, predicate, [context]):遍历一个集合,返回所有符…

    jquery 2023年5月12日
    00
  • jQWidgets jqxDropDownButton关闭事件

    jQWidgets jqxDropDownButton关闭事件 jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI组件和工具,包括表格、表历、单等。jqxDropDownButton是jQWidgets中的一个组件,用于创建下拉菜单按钮。close事件是jqxDropDownButton中的一个事件,用于在下拉菜单关闭时触发。 close…

    jquery 2023年5月9日
    00
  • jQWidgets jqxDataTable pageSizeChanged事件

    jQWidgets 是一个流行的 JavaScript UI 库,提供了许多可定制的 UI 组件。其中一个组件是 jqxDataTable,它是一个用于显示和编辑表格数据的件。jqxDataTable 提供多个事件,其中之一是 pageSizeChanged。下面是关于 jqxDataTable 的 pageSizeChanged 事件的详攻: pageSi…

    jquery 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部