Greasy Fork is available in English.

JS-分页插件

用于对数据分页显示

ეს სკრიპტი არ უნდა იყოს პირდაპირ დაინსტალირებული. ეს ბიბლიოთეკაა, სხვა სკრიპტებისთვის უნდა ჩართეთ მეტა-დირექტივაში // @require https://update.greasyfork.org/scripts/465550/1360573/JS-%E5%88%86%E9%A1%B5%E6%8F%92%E4%BB%B6.js.

/* 

数据分页导航
例子

let dataPaging = new DataPaging({
    data: [1, 2, 3, 4, 5, 6, 7, 8, 9],
    pageCount: 3,
    currentPage: 1,
    pageChangeCallBack:function(page){
        console.log(page);
    }
});
dataPaging.append(document.querySelector("body > div"));
*/
let DataPaging = {};
(function () {
  class Paging {
    CONFIG = {
      /* 数据 */
      data: [],
      /* 每一页显示的数据数量 */
      pageCount: 5,
      /* 当前能最多显示出来的页码 */
      pageStep: 3,
      /* 当前页码 */
      currentPage: 1,
      /**
       * 当前页码改变的回调
       * @param {number} page 当前页
       */
      pageChangeCallBack: function (page) {},
      /* 上一页按钮 */
      prevBtn: {
        /* 是否启用 */
        enable: true,
        /* 点击事件回调 */
        callBack: function () {},
      },
      /* 下一页按钮 */
      nextBtn: {
        /* 是否启用 */
        enable: true,
        callBack: function () {},
      },
      /* 第一页按钮 */
      firstBtn: {
        /* 是否启用 */
        enable: true,
        callBack: function () {},
      },
      /* 最后一页按钮 */
      lastBtn: {
        /* 是否启用 */
        enable: true,
        callBack: function () {},
      },
    };
    PAGE_CONFIG = {
      /**
       * 获取当前所在页
       * @returns {Number}
       */
      getCurrentPage: () => {
        return this.DOM_CONFIG.getAttributeWithPageId(
          this.DOM_CONFIG.getAttributeWithCurrentPage()
        );
      },
      maxPage: 1 /* 最大页码 */,
    };
    DOM_CONFIG = {
      /* 整个分页元素 */
      dataPagingNode: {
        localName: "div",
        id: "whitesev-datapaging",
        dom: null,
      },
      /* 第一页按钮 */
      firstBtnNode: {
        localName: "a",
        className: "pg-first",
        svgHTML: `<svg t="1694497357294" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4758" width="20"><path d="M730.639277 211.376748l60.943177 60.943176-301.698894 301.698893L428.940384 513.075641z" p-id="4759"></path><path d="M730.496772 814.924547l60.943176-60.943176-301.698893-301.698893L428.797879 513.225654z" p-id="4760"></path><path d="M298.666667 213.333333h85.333333v597.333334H298.666667z" p-id="4761"></path></svg>`,
        get: () => {
          return this.DOM_CONFIG.dataPagingNode.dom.querySelector(
            `${this.DOM_CONFIG.firstBtnNode.localName}.${this.DOM_CONFIG.firstBtnNode.className}`
          );
        },
      },
      /* 上一页按钮 */
      prevBtnNode: {
        localName: "a",
        className: "pg-prev",
        svgHTML: `<svg t="1694497840770" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5272" width="20"><path d="M620.322607 151.04875l60.943176 60.943176-362.038672 362.038672L258.283935 513.087422z" p-id="5273"></path><path d="M620.180101 875.252545l60.943177-60.943176-362.038672-362.038672L258.141429 513.213873z" p-id="5274"></path></svg>`,
        get: () => {
          return this.DOM_CONFIG.dataPagingNode.dom.querySelector(
            `${this.DOM_CONFIG.prevBtnNode.localName}.${this.DOM_CONFIG.prevBtnNode.className}`
          );
        },
      },
      /* 下一页按钮 */
      nextBtnNode: {
        localName: "a",
        className: "pg-next",
        svgHTML: `<svg t="1694497949481" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5465" width="20"><path d="M403.399239 151.02258l-60.943177 60.943177 362.038672 362.038672L765.437911 513.061252z" p-id="5466"></path><path d="M403.576858 875.263008l-60.943176-60.943176 362.038672-362.038672L765.61553 513.224336z" p-id="5467"></path></svg>`,
        get: () => {
          return this.DOM_CONFIG.dataPagingNode.dom.querySelector(
            `${this.DOM_CONFIG.nextBtnNode.localName}.${this.DOM_CONFIG.nextBtnNode.className}`
          );
        },
      },
      /* 最后一页按钮 */
      lastBtnNode: {
        localName: "a",
        className: "pg-last",
        svgHTML: `<svg t="1694498035538" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2299" width="20"><path d="M516.266667 490.666667L256 230.4 315.733333 170.666667l320 320L315.733333 810.666667 256 750.933333l260.266667-260.266666zM678.4 170.666667h85.333333v640h-85.333333V170.666667z" p-id="2300"></path></svg>`,
        get: () => {
          return this.DOM_CONFIG.dataPagingNode.dom.querySelector(
            `${this.DOM_CONFIG.lastBtnNode.localName}.${this.DOM_CONFIG.lastBtnNode.className}`
          );
        },
      },
      /**
       * 设置 元素的 页码 值
       * @param {HTMLElement} node
       */
      setAttributeWithPageId: (node, page) => {
        node.setAttribute("page-id", page);
      },
      /**
       * 获取 元素 的页码属性
       * @param {HTMLElement} node
       * @returns {Number|null}
       */
      getAttributeWithPageId: (node) => {
        return node?.getAttribute("page-id")
          ? parseInt(node.getAttribute("page-id"))
          : null;
      },
      /**
       * 判断 元素 是否存在页码属性
       * @param {HTMLElement} node
       * @returns {Boolean}
       */
      hasAttributeWithPageId: (node) => {
        return node.hasAttribute("page-id");
      },
      /**
       * 设置 元素的属性 为当前所在页码
       * @param {HTMLElement} node
       */
      setAttributeWithCurrentPage: (node) => {
        node.setAttribute("data-current-page", "");
      },
      /**
       * 获取当前页码的元素
       * @param {HTMLElement?} dataPagingNode
       * @returns {HTMLElement|null}
       */
      getAttributeWithCurrentPage: (dataPagingNode) => {
        return (
          dataPagingNode || this.DOM_CONFIG.dataPagingNode.dom
        ).querySelector("a[data-current-page]");
      },
      /**
       * 判断 元素 是否存在 当前页的属性
       * @param {HTMLElement} node
       * @returns
       */
      hasAttributeWithCurrentPage: (node) => {
        return node.hasAttribute("data-current-page");
      },
      /**
       * 移除 当前页码的属性
       * @param {HTMLElement} node
       */
      removeAttributeWithCurrentPage: (node) => {
        node.removeAttribute("data-current-page");
      },
      /**
       * 设置 元素 禁用
       * @param {HTMLElement} node
       */
      setAttributeWithDisabled: (node) => {
        node.setAttribute("disabled", true);
      },
      /**
       * 移除当前页面的禁用的元素
       * @param {HTMLElement|null} dataPagingNode
       */
      removeAllAttributeWithDisabled: (dataPagingNode) => {
        (dataPagingNode || this.DOM_CONFIG.dataPagingNode.dom)
          .querySelectorAll("a[class][disabled]")
          .forEach((item) => {
            item.removeAttribute("disabled");
          });
      },
      /**
       * 获取 第一页 元素节点
       * @param {HTMLElement?} dataPagingNode
       * @returns {HTMLElement|null}
       */
      getFirstPageNode: (dataPagingNode) => {
        return (
          dataPagingNode || this.DOM_CONFIG.dataPagingNode.dom
        ).querySelector("a[page-id='1']");
      },
      /**
       * 获取 最后一页 元素节点
       * @param {HTMLElement?} dataPagingNode
       * @returns {HTMLElement|null}
       */
      getLastPageNode: (dataPagingNode) => {
        return (
          dataPagingNode || this.DOM_CONFIG.dataPagingNode.dom
        ).querySelector(`a[page-id='${this.PAGE_CONFIG.maxPage}']`);
      },
      /**
       * 获取当前所有的页码元素节点
       * @param {HTMLElement?} dataPagingNode
       * @returns {NodeList}
       */
      getAllPageNode: (dataPagingNode) => {
        return (
          dataPagingNode || this.DOM_CONFIG.dataPagingNode.dom
        ).querySelectorAll("a[page-id]");
      },
    };
    constructor(details) {
      this.changeConfig(details);
    }
    /**
     * 添加CSS
     */
    addCSS(target = document.head) {
      let cssNode = document.createElement("style");
      cssNode.setAttribute("type", "text/css");
      cssNode.innerHTML = `@charset "utf-8";
      #${this.DOM_CONFIG.dataPagingNode.id} {
        text-align: center;
        display: inline-block;
      }
      #${this.DOM_CONFIG.dataPagingNode.id} .${this.DOM_CONFIG.firstBtnNode.className},
      #${this.DOM_CONFIG.dataPagingNode.id} .${this.DOM_CONFIG.prevBtnNode.className},
      #${this.DOM_CONFIG.dataPagingNode.id} .${this.DOM_CONFIG.nextBtnNode.className},
      #${this.DOM_CONFIG.dataPagingNode.id} .${this.DOM_CONFIG.lastBtnNode.className} {
        font-family: Arial, sans-serif;
        color: #333;
        font-size: 22px;
        fill: currentColor;
        display: inline-flex;
        justify-content: center;
        align-items: center;
        text-decoration: none;
      }
      #${this.DOM_CONFIG.dataPagingNode.id} a,
      #${this.DOM_CONFIG.dataPagingNode.id} span {
        width: 45px;
        height: 40px;
        border: 1px solid #ebebeb;
        margin-left: -1px;
        color: #000000;
        line-height: 40px;
        float: left;
        font-size: 15px;
        text-decoration: none;
        margin: 0 2px;
        border-radius: 6px;
      }
      #${this.DOM_CONFIG.dataPagingNode.id} a:hover,
      #${this.DOM_CONFIG.dataPagingNode.id} span:hover {
        border-color: #3897cd;
        color: #3897cd;
        position: relative;
        z-index: 1;
      }
      #${this.DOM_CONFIG.dataPagingNode.id} a {
        cursor: pointer;
        user-select: none;
      }
      #${this.DOM_CONFIG.dataPagingNode.id} a[data-current-page] {
        background-color: #222a35;
        color: #fff;
        border-color: #ebebeb;
        position: relative;
        z-index: 1;
      }
      #${this.DOM_CONFIG.dataPagingNode.id} a.${this.DOM_CONFIG.firstBtnNode.className}[disabled="true"],
      #${this.DOM_CONFIG.dataPagingNode.id} a.${this.DOM_CONFIG.prevBtnNode.className}[disabled="true"],
      #${this.DOM_CONFIG.dataPagingNode.id} a.${this.DOM_CONFIG.nextBtnNode.className}[disabled="true"],
      #${this.DOM_CONFIG.dataPagingNode.id} a.${this.DOM_CONFIG.lastBtnNode.className}[disabled="true"]{
        cursor: not-allowed;
        border: 1px solid transparent;
        color: #8a8a8a;
      }
      `;
      target.appendChild(cssNode);
    }
    /**
     * 获取分页元素
     * @returns {Element}
     */
    getDataPagingNode() {
      let that = this;
      let dataPagingNode = document.createElement(
        that.DOM_CONFIG.dataPagingNode.localName
      );
      that.DOM_CONFIG.dataPagingNode.dom = dataPagingNode;
      dataPagingNode.id = that.DOM_CONFIG.dataPagingNode.id;
      /* 第一页 */
      let firstBtnNode = document.createElement(
        that.DOM_CONFIG.firstBtnNode.localName
      );
      firstBtnNode.innerHTML = that.DOM_CONFIG.firstBtnNode.svgHTML;
      /* 上一页 */
      let prevBtnNode = document.createElement(
        that.DOM_CONFIG.prevBtnNode.localName
      );
      prevBtnNode.innerHTML = that.DOM_CONFIG.prevBtnNode.svgHTML;
      /* 下一页 */
      let nextBtnNode = document.createElement(
        that.DOM_CONFIG.nextBtnNode.localName
      );
      nextBtnNode.innerHTML = that.DOM_CONFIG.nextBtnNode.svgHTML;
      /* 最后一页 */
      let lastBtnNode = document.createElement(
        that.DOM_CONFIG.lastBtnNode.localName
      );
      lastBtnNode.innerHTML = that.DOM_CONFIG.lastBtnNode.svgHTML;
      firstBtnNode.className = that.DOM_CONFIG.firstBtnNode.className;
      prevBtnNode.className = that.DOM_CONFIG.prevBtnNode.className;
      nextBtnNode.className = that.DOM_CONFIG.nextBtnNode.className;
      lastBtnNode.className = that.DOM_CONFIG.lastBtnNode.className;
      /* 计算总数据量除以显示的数据量 得出分页的数量 */
      that.PAGE_CONFIG.maxPage = Math.ceil(
        that.CONFIG.data.length / that.CONFIG.pageCount
      );
      /* 校正超出或小于的当前页码 */
      if (that.CONFIG.currentPage < 1) {
        that.CONFIG.currentPage = 1;
      } else if (that.CONFIG.currentPage > that.PAGE_CONFIG.maxPage) {
        that.CONFIG.currentPage = that.PAGE_CONFIG.maxPage;
      }
      /* 超过1 才开启分页 */
      if (that.PAGE_CONFIG.maxPage < 2) {
        return dataPagingNode;
      }
      /* 判断第一页按钮 是否开启 */
      if (that.CONFIG.firstBtn.enable) {
        this.setFirstBtnClickEvent(firstBtnNode, dataPagingNode);
        dataPagingNode.appendChild(firstBtnNode);
      }
      /* 判断上一页按钮 是否开启 */
      if (that.CONFIG.prevBtn.enable) {
        this.setPrevBtnClickEvent(prevBtnNode, dataPagingNode);
        dataPagingNode.appendChild(prevBtnNode);
      }
      let currentPage = that.CONFIG.currentPage;
      /* 计算出的最大页码在限制的显示页码数量内 */
      /* 比如计算出的页码总共有5个,设置中当前能显示出的页码按钮元素为3个 */
      if (that.CONFIG.pageStep > that.PAGE_CONFIG.maxPage) {
        for (
          let _currentPage = currentPage;
          _currentPage <= that.PAGE_CONFIG.maxPage;
          _currentPage++
        ) {
          let pageBtnNode = document.createElement("a");
          that.DOM_CONFIG.setAttributeWithPageId(pageBtnNode, _currentPage);
          pageBtnNode.innerText = _currentPage;
          if (that.CONFIG.currentPage === _currentPage) {
            that.DOM_CONFIG.setAttributeWithCurrentPage(pageBtnNode);
          }
          this.setPageBtnClickEvent(pageBtnNode, dataPagingNode);
          dataPagingNode.appendChild(pageBtnNode);
        }
      } else {
        /* 如果 当前页 + 限制显示的页码 大于等于 最大页,那么 从最后一页倒序着添加 */
        if (currentPage + that.CONFIG.pageStep > that.PAGE_CONFIG.maxPage) {
          currentPage = that.PAGE_CONFIG.maxPage;
          let needAppendNodeList = [];
          for (let index = 0; index < that.CONFIG.pageStep; index++) {
            let pageBtnNode = document.createElement("a");
            that.DOM_CONFIG.setAttributeWithPageId(pageBtnNode, currentPage);
            pageBtnNode.innerText = currentPage;
            if (that.CONFIG.currentPage === currentPage) {
              that.DOM_CONFIG.setAttributeWithCurrentPage(pageBtnNode);
            }
            this.setPageBtnClickEvent(pageBtnNode, dataPagingNode);
            needAppendNodeList = [...needAppendNodeList, pageBtnNode];
            currentPage--;
          }
          needAppendNodeList.reverse();
          needAppendNodeList.forEach((item) => {
            dataPagingNode.appendChild(item);
          });
        } else {
          /* 当前页 在计算出的页码内 */
          for (let index = 0; index < that.CONFIG.pageStep; index++) {
            let pageBtnNode = document.createElement("a");
            that.DOM_CONFIG.setAttributeWithPageId(pageBtnNode, currentPage);
            pageBtnNode.innerText = currentPage;
            if (that.CONFIG.currentPage === currentPage) {
              that.DOM_CONFIG.setAttributeWithCurrentPage(pageBtnNode);
            }
            this.setPageBtnClickEvent(pageBtnNode, dataPagingNode);
            dataPagingNode.appendChild(pageBtnNode);
            currentPage++;
          }
        }
      }
      /* 判断下一页按钮 是否开启 */
      if (that.CONFIG.nextBtn.enable) {
        this.setNextBtnClickEvent(nextBtnNode, dataPagingNode);
        dataPagingNode.appendChild(nextBtnNode);
      }
      /* 判断最后一页按钮 是否开启 */
      if (that.CONFIG.lastBtn.enable) {
        this.setLastBtnClickEvent(lastBtnNode, dataPagingNode);
        dataPagingNode.appendChild(lastBtnNode);
      }
      /* 配置中的当前页码为1时 设置 第一页、上一页按钮禁用 */
      if (that.CONFIG.currentPage === 1) {
        that.DOM_CONFIG.setAttributeWithDisabled(
          that.DOM_CONFIG.firstBtnNode.get()
        );
        that.DOM_CONFIG.setAttributeWithDisabled(
          that.DOM_CONFIG.prevBtnNode.get()
        );
      } else if (that.CONFIG.currentPage === that.PAGE_CONFIG.maxPage) {
        /* 如果为最大的页码 下一页、最后一页禁用 */
        that.DOM_CONFIG.setAttributeWithDisabled(
          that.DOM_CONFIG.nextBtnNode.get()
        );
        that.DOM_CONFIG.setAttributeWithDisabled(
          that.DOM_CONFIG.lastBtnNode.get()
        );
      }
      return dataPagingNode;
    }
    /**
     * 设置 第一页 点击事件
     * @param {HTMLElement} btnNode 元素
     * @param {HTMLElement} dataPagingNode 分页元素(主)
     */
    setFirstBtnClickEvent(btnNode, dataPagingNode) {
      let that = this;
      btnNode.onclick = function () {
        let currentNode = that.DOM_CONFIG.getAttributeWithCurrentPage();
        /* 当前页为第一页时无效 */
        if (that.DOM_CONFIG.getAttributeWithPageId(currentNode) === 1) {
          return;
        }
        that.CONFIG.firstBtn.callBack();
        let allPageNode = that.DOM_CONFIG.getAllPageNode(dataPagingNode);
        for (let i = 0; i < that.CONFIG.pageStep; i++) {
          let item = allPageNode[i];
          /* 设置当前页码为第一页 */
          if (i === 0) {
            that.DOM_CONFIG.setAttributeWithCurrentPage(item);
          } else {
            /* 移除其它设置的第一页 */
            that.DOM_CONFIG.removeAttributeWithCurrentPage(item);
          }
          that.DOM_CONFIG.setAttributeWithPageId(item, i + 1);
          item.innerText = i + 1;
        }
        that.DOM_CONFIG.removeAllAttributeWithDisabled(dataPagingNode);
        /* 可视区域存在第一页的页码时,禁用第一页、上一页按钮 */
        if (that.DOM_CONFIG.getFirstPageNode(dataPagingNode)) {
          that.DOM_CONFIG.setAttributeWithDisabled(
            that.DOM_CONFIG.firstBtnNode.get()
          );
          that.DOM_CONFIG.setAttributeWithDisabled(
            that.DOM_CONFIG.prevBtnNode.get()
          );
        }
        that.CONFIG.pageChangeCallBack(1);
      };
    }
    /**
     * 设置 上一页 点击事件
     * @param {HTMLElement} btnNode 元素
     * @param {HTMLElement} dataPagingNode 分页元素(主)
     */
    setPrevBtnClickEvent(btnNode, dataPagingNode) {
      let that = this;
      btnNode.onclick = function () {
        let currentNode = that.DOM_CONFIG.getAttributeWithCurrentPage();
        /* 当前页为第一页时无效 */
        if (that.DOM_CONFIG.getAttributeWithPageId(currentNode) === 1) {
          return;
        }
        that.CONFIG.prevBtn.callBack();
        if (
          that.DOM_CONFIG.hasAttributeWithPageId(
            currentNode.previousElementSibling
          )
        ) {
          currentNode.previousElementSibling.click();
        } else {
          let allPageNode = that.DOM_CONFIG.getAllPageNode(dataPagingNode);
          allPageNode.forEach((item, index) => {
            let page = that.DOM_CONFIG.getAttributeWithPageId(item);
            page--;
            that.DOM_CONFIG.setAttributeWithPageId(item, page);
            item.innerText = page;
          });
          that.CONFIG.pageChangeCallBack(that.PAGE_CONFIG.getCurrentPage());
        }
        that.DOM_CONFIG.removeAllAttributeWithDisabled(dataPagingNode);
        /* 如果当前第1页可见,且当前所在页不是第1页,则禁用上一页按钮和第一页按钮 */
        if (
          that.DOM_CONFIG.getFirstPageNode(dataPagingNode) &&
          that.PAGE_CONFIG.getCurrentPage() == 1
        ) {
          that.DOM_CONFIG.setAttributeWithDisabled(
            that.DOM_CONFIG.firstBtnNode.get()
          );
          that.DOM_CONFIG.setAttributeWithDisabled(
            that.DOM_CONFIG.prevBtnNode.get()
          );
        }
      };
    }
    /**
     * 设置 下一页 点击事件
     * @param {HTMLElement} btnNode 元素
     * @param {HTMLElement} dataPagingNode 分页元素(主)
     */
    setNextBtnClickEvent(btnNode, dataPagingNode) {
      let that = this;
      btnNode.onclick = function () {
        let currentNode = that.DOM_CONFIG.getAttributeWithCurrentPage();
        /* 当前页出于最后一页时 无效点击 */
        if (
          that.DOM_CONFIG.getAttributeWithPageId(currentNode) ===
          that.PAGE_CONFIG.maxPage
        ) {
          return;
        }
        that.CONFIG.nextBtn.callBack();
        /* 如果后面的按钮存在页码属性 点击 */
        if (
          that.DOM_CONFIG.hasAttributeWithPageId(currentNode.nextElementSibling)
        ) {
          currentNode.nextElementSibling.click();
        } else {
          let allPageNode = that.DOM_CONFIG.getAllPageNode(dataPagingNode);
          allPageNode.forEach((item, index) => {
            let page = that.DOM_CONFIG.getAttributeWithPageId(item);
            page++;
            if (page > that.PAGE_CONFIG.maxPage) {
              return;
            }
            that.DOM_CONFIG.setAttributeWithPageId(item, page);
            item.innerText = page;
          });
          that.CONFIG.pageChangeCallBack(that.PAGE_CONFIG.getCurrentPage());
        }
        that.DOM_CONFIG.removeAllAttributeWithDisabled(dataPagingNode);
        if (
          that.DOM_CONFIG.getLastPageNode() &&
          that.PAGE_CONFIG.getCurrentPage() == that.PAGE_CONFIG.maxPage
        ) {
          that.DOM_CONFIG.setAttributeWithDisabled(
            that.DOM_CONFIG.nextBtnNode.get()
          );
          that.DOM_CONFIG.setAttributeWithDisabled(
            that.DOM_CONFIG.lastBtnNode.get()
          );
        }
      };
    }
    /**
     * 设置 最后一页 点击事件
     * @param {HTMLElement} btnNode 元素
     * @param {HTMLElement} dataPagingNode 分页元素(主)
     */
    setLastBtnClickEvent(btnNode, dataPagingNode) {
      let that = this;
      btnNode.onclick = function () {
        let currentNode = that.DOM_CONFIG.getAttributeWithCurrentPage();
        if (
          that.DOM_CONFIG.getAttributeWithPageId(currentNode) ===
          that.PAGE_CONFIG.maxPage
        ) {
          return;
        }
        that.CONFIG.lastBtn.callBack();
        let allPageNode = Array.from(
          that.DOM_CONFIG.getAllPageNode(dataPagingNode)
        );
        allPageNode.reverse();
        let pageCount = that.PAGE_CONFIG.maxPage;
        let index = 0;
        while (true) {
          if (that.PAGE_CONFIG.maxPage - pageCount > 3) {
            break;
          }
          let item = allPageNode[index];
          if (item == null) {
            break;
          }
          if (index === 0) {
            that.DOM_CONFIG.setAttributeWithCurrentPage(item);
          } else {
            that.DOM_CONFIG.removeAttributeWithCurrentPage(item);
          }

          that.DOM_CONFIG.setAttributeWithPageId(item, pageCount);
          item.innerText = pageCount;
          pageCount--;
          index++;
        }
        that.DOM_CONFIG.removeAllAttributeWithDisabled(dataPagingNode);
        that.DOM_CONFIG.setAttributeWithDisabled(
          that.DOM_CONFIG.nextBtnNode.get()
        );
        that.DOM_CONFIG.setAttributeWithDisabled(
          that.DOM_CONFIG.lastBtnNode.get()
        );
        that.CONFIG.pageChangeCallBack(that.PAGE_CONFIG.maxPage);
      };
    }
    /**
     * 设置 页 点击事件
     * @param {HTMLElement} btnNode 元素
     * @param {HTMLElement} dataPagingNode 分页元素(主)
     * @this {Paging}
     */
    setPageBtnClickEvent(btnNode, dataPagingNode) {
      let that = this;
      btnNode.onclick = function (event) {
        let eventBtnNode = event.target;
        that.DOM_CONFIG.getAllPageNode(dataPagingNode).forEach((item) => {
          /* 是当前点击的页码 */
          if (item == eventBtnNode) {
            /* 如果 当前点击的页码不是current */
            if (!that.DOM_CONFIG.hasAttributeWithCurrentPage(eventBtnNode)) {
              that.DOM_CONFIG.setAttributeWithCurrentPage(eventBtnNode);
              that.CONFIG.pageChangeCallBack(that.PAGE_CONFIG.getCurrentPage());
            }
          } else {
            that.DOM_CONFIG.removeAttributeWithCurrentPage(item);
          }
        });
        that.DOM_CONFIG.removeAllAttributeWithDisabled(dataPagingNode);
        /* 如果当前第1页可见,且当前所在页不是第1页,则禁用上一页按钮和第一页按钮 */
        if (
          that.DOM_CONFIG.getFirstPageNode(dataPagingNode) &&
          that.PAGE_CONFIG.getCurrentPage() == 1
        ) {
          that.DOM_CONFIG.setAttributeWithDisabled(
            that.DOM_CONFIG.firstBtnNode.get()
          );
          that.DOM_CONFIG.setAttributeWithDisabled(
            that.DOM_CONFIG.prevBtnNode.get()
          );
        }
        /* 如果当前最后一页可见,且当前所在页不是最后一页,则禁用下一页按钮和最后一页按钮 */
        if (
          that.DOM_CONFIG.getLastPageNode() &&
          that.PAGE_CONFIG.getCurrentPage() == that.PAGE_CONFIG.maxPage
        ) {
          that.DOM_CONFIG.setAttributeWithDisabled(
            that.DOM_CONFIG.nextBtnNode.get()
          );
          that.DOM_CONFIG.setAttributeWithDisabled(
            that.DOM_CONFIG.lastBtnNode.get()
          );
        }
      };
    }
    /**
     * 把分页添加到某个父元素下
     * @param {HTMLElement} parentNode
     */
    append(parentNode) {
      let that = this;
      that.DOM_CONFIG.dataPagingNode.dom?.remove();
      that.DOM_CONFIG.dataPagingNode.dom = null;
      parentNode.appendChild(that.getDataPagingNode());
    }

    /**
     * 动态修改配置,注意,修改后需要.append修改原来的元素
     * @param {Object} details 配置
     */
    changeConfig(details) {
      Object.assign(this.CONFIG, details);
    }

    /**
     * 刷新页面
     * 当总页数5页,当前在第3页,把第3页的数据删完,后面2页的数据会自动往前,需要重新计算数据
     * 且重新计算的数据的页数大于当前页(第3页)时,当前页不变,若小于当前页(第3页),则当前页为计算好的最大页
     * @param {[...any]} data 新的数据
     */
    refresh(data) {
      if (data.length === this.CONFIG.data.length) {
        return;
      }
      this.CONFIG.data = [];
      this.CONFIG.data = data;
      let currentPage = this.PAGE_CONFIG.getCurrentPage();
      let maxPage = Math.ceil(data.length / this.CONFIG.pageCount);
      if (currentPage > maxPage) {
        currentPage = maxPage;
      }
      this.CONFIG.currentPage = currentPage;
      let parentElement = this.DOM_CONFIG.dataPagingNode.dom.parentElement;
      this.append(parentElement);
    }
  }
  DataPaging = Paging;
})();