anypaginator是一个轻量级的jQuery分页插件,可以用来浏览大量数据,而不必加载整个页面。
这个插件设置简单,使用方便。它支持处理几乎所有的数据类型,如表、HTML列表,甚至远程JSON数据。
根据AGPL v3许可证发布。
1.加载最新的jQuery库后,包括主脚本anyPaginator.js。
- <link href="/path/to/anyPaginator.css" rel="stylesheet" />
- <script src="/path/to/cdn/jquery.min.js"></script>
- <script src="/path/to/anyPaginator.js"></script>
2.使用anypaginator插件来处理静态HTML表中的大量数据。
- <table id="mytable">
- <tbody>
- </tbody>
- <tfoot>
- <tr><td id="myfoot"></td></tr>
- </tfoot>
- </table>
- function refreshTable(pager,num)
- {
- if (!pager)
- return;
- let page_no = 1;
- let tbody = $("#mytable > tbody");
- if (tbody.length)
- tbody.empty();
- for (let i=1; i<=num; i++) {
- // Display only items on current page
- if (!((i-1) % pager.options.rowsPerPage))
- ++page_no;
- if (page_no-1 == pager.currentPage) {
- tbody.append($("<tr><td>Local row "+i+"</td></tr>"));
- }
- }
- } // refreshTable
- function populatePager(pager,num)
- {
- if (!pager)
- return;
- let page_no = 1;
- for (let i=1; i<=num; i++) {
- // Add a page number each rowsPerPage rows
- if (!((i-1) % pager.options.rowsPerPage)) {
- pager.anyPaginator("add");
- ++page_no;
- }
- }
- } // populatePager
- // Initialize paginator in tfoot
- let num = 200;
- let pager = $("#myfoot").anyPaginator({
- mode: 0, // 0: buttons, 1: item range, 2: page number
- onClick: function() { refreshTable(pager,num); },
- rowsPerPage: 5,
- });
- // Display table contents
- refreshTable(pager,num);
- // Add page numbers
- populatePager(pager,num);
3.将您自己的CSS样式应用于分页链接。
- .any-paginator-container {
- margin-top: 10px;
- background: white;
- font: 12px Verdana, sans-serif;
- }
- .any-paginator-btn {
- margin-right: 1px;
- white-space: nowrap;
- display: inline-block;
- min-width: 20px;
- text-align: center;
- border-radius:3px;
- color: #fc5200;
- cursor: pointer;
- }
- .any-paginator-num {
- border: 1px solid #fc5200;
- }
- .any-paginator-ellipsis {
- border: 1px solid white;
- color: #888;
- cursor: default;
- }
- .any-paginator-inactive {
- color: #aaa;
- }
- .any-paginator-compact {
- margin-right: 1px;
- white-space: nowrap;
- display: inline-block;
- min-width: 20px;
- text-align: center;
- color: #333;
- }
- .any-paginator-goto {
- white-space: nowrap;
- display: inline-block;
- }
- #anyPaginator_goto_inp {
- min-width: 22px;
- max-width: 22px;
- min-height: unset;
- margin-right: 3px;
- padding: 1px;
- padding-top: 0px;
- padding-bottom: 0px;
- white-space: nowrap;
- display: inline-block;
- text-align: center;
- font: 12px Verdana, sans-serif;
- }
- #anyPaginator_goto_inp:focus {
- outline: none;
- }
- #anyPaginator_goto_btn {
- padding: 2px;
- white-space: nowrap;
- display: inline-block;
- cursor: pointer;
- }
- #anyPaginator_goto_btn:hover {
- padding: 1px;
- border: 1px solid #ddd;
- }
- .noselect {
- -webkit-touch-callout: none; /* iOS Safari */
- -webkit-user-select: none; /* Safari */
- -khtml-user-select: none; /* Konqueror HTML */
- -moz-user-select: none; /* Old versions of Firefox */
- -ms-user-select: none; /* Internet Explorer/Edge */
- user-select: none; /* Currently supported by
- Vivaldi, Opera, Chrome, Edge and Firefox */
- }
4.这个例子展示了如何处理远程数据。
- <table id="mytable">
- <tbody>
- </tbody>
- <tfoot>
- <tr><td id="myfoot"></td></tr>
- </tfoot>
- </table>
- let dataSource = "/path/to/remote/data/";
- function refreshTable(pager,num)
- {
- if (!pager)
- return;
- let from = pager.options.rowsPerPage *(pager.currentPage - 1);
- let to = from + pager.options.rowsPerPage - 1;
- let db_url = dataSource + "remote_select.php?from="+from+"&to="+to;
- $.getJSON(db_url)
- .done( function(data,textStatus,jqXHR) {
- if (textStatus == "success") {
- let tbody = $("#mytable > tbody");
- if (tbody.length)
- tbody.empty();
- // Display all items received
- for (const i in data)
- tbody.append($("<tr><td>"+data[i]+"</td></tr>"));
- populatePager(pager,num,pager.currentPage);
- }
- else
- if (textStatus == "error")
- console.log("Error: "+jqXHR.status+": "+jqXHR.statusText);
- })
- .fail(function(jqXHR,textStatus,error) {
- console.error("Server error (select):"+jqXHR.responseText);
- });
- } // refreshTable
- function populatePager(pager,num,page)
- {
- if (!pager)
- return;
- pager.reset();
- let page_no = 1;
- for (let i=1; i<=num; i++) {
- // Add a page number each rowsPerPage rows
- if (!((i-1) % pager.options.rowsPerPage)) {
- pager.anyPaginator("add");
- ++page_no;
- }
- }
- pager.showPage(page);
- } // populatePager
- // Create remote table
- let num = 70; // Number of rows
- let db_url = dataSource + "remote_create.php?num="+num;
- $.getJSON(db_url)
- .done( function(data,textStatus,jqXHR) {
- // Initialize paginator in tfoot
- let pager = $("#myfoot").anyPaginator({
- mode: 0,
- onClick: function() { refreshTable(pager,num); },
- rowsPerPage: 5,
- prevText: "<",
- nextText: ">",
- });
- // Display table contents
- refreshTable(pager,num);
- // Add page numbers
- populatePager(pager,num);
- })
- .fail(function(jqXHR,textStatus,error) {
- console.error("Server error (create):"+jqXHR.responseText);
- });
5.所有默认选项。
- let pager = $("#myfoot").anyPaginator({
- // 0: buttons, 1: item range, 2: page number
- mode: 0,
- // If true, hide the paginator if there is only one page
- hideIfOne: true,
- // Number of items per page
- itemsPerPage: 20,
- // Text in front of page number for mode == 1
- pageText: "Page",
- // Text in front of item range for mode == 2
- itemText: "Item",
- // Text on the "go" button
- gotoText: "Go",
- // Text on the "previous" button, ignored if prevIcon is not null
- prevText: "«",
- // Text on the "next" button, ignored if nextIcon is not null
- nextText: "»",
- // Text on the "first" button, ignored if firstIcon is not null
- firstText: "|<",
- // Text on the "last" button, ignored if lastIcon is not null
- lastText: ">|",
- // Icon on the "go" button instead of gotoText
- gotoIcon: null,
- // Icon on the "previous" button instead of prevText
- prevIcon: null,
- // Icon on the "next" button instead of nextText
- nextIcon: null,
- // Icon on the "first" button instead of firstText
- firstIcon: null,
- // Icon on the "last" button instead of lastText
- lastIcon: null,
- // Whether to hide the "goto page" button/input field
- hideGoto: false,
- // Whether to hide the "previous" button
- hidePrev: false,
- // Whether to hide the "next" button
- hideNext: false,
- // Whether to hide the "first" button. Should be "true" if splitLeft == 1
- hideFirst: true,
- // Whether to hide the "last" button. Should be "true" if splitRight == 1
- hideLast: true,
- // Number of split buttons to the left
- splitLeft: 3,
- // Number of split buttons in the middle
- splitMiddle: 3,
- // Number of split buttons to the right
- splitRight: 3,
- });
6.API方法。
- // reset the plugin
- pager.reset({
- // options
- });
- // get the number of pages
- pager.numPages();
- // get the current page
- pager.currentPage();
- // get the number of items
- pager.numItems();
- // set the number of items
- pager.numItems(10);
- // increase/decrease number of items by 1
- pager.addItem();
- pager.removeItem();
- // get the current options & values
- pager.option();
- pager.option(optionName);
- // update options
- pager.option({
- // options
- });
- // refresh
- pager.refresh();
- // increase/decrease number of pages by 1
- pager.addPage();
- pager.removePage();
- // show page x
- pager.showPage(x);
1.0版(2023-04-05)
2023-04-05
2022-02-08
2022-02-05
2022-02-04
2022-01-27
2022-01-26
2022-01-21
2022-01-18
2022-01-14
2022-01-13