分頁導航DOM更新實踐:JavaScript與jQuery的結合使用

分頁導航DOM更新實踐:JavaScript與jQuery的結合使用

在Web開發中,分頁導航是展示大量數據時不可或缺的UI組件。合理的分頁不僅可以提高應用性能,還能優化用戶體驗。本博客將通過一個實際的DOM結構和模擬數據,講解如何使用JavaScript和jQuery來動態更新分頁導航。

image-20240702140748743

分頁場景講述

在設計分頁導航時,我們會遇到多種場景,每種場景都需要不同的處理方式:

  • 總頁數較少:當數據量不大時,可能只需要顯示所有頁碼,無需省略。

    ? image-20240702140606996

  • 當前頁在頁碼列表的邊緣:如果當前頁是第一頁或最后一頁,可能不需要“上一頁”或“下一頁”鏈接。

image-20240702140259012

  • 當前頁在中間:需要在頁碼列表中適當位置顯示當前頁,并在邊緣顯示第一頁和最后一頁的鏈接。

image-20240702140315025

  • 大量頁碼的省略處理:當總頁數很多時,不可能全部顯示,需要用省略號代替中間的頁碼。

理解這些場景有助于我們編寫靈活且健壯的分頁邏輯。

模擬數據

假設我們從后端API獲取了以下分頁數據:

var paginationData = {page: 1,       // 當前頁碼pages : 5,     //總頁數per_page: 10 ,  // 每頁顯示的項目數total: 50      // 總項目數
};

原始DOM結構

下面是現有的分頁DOM結構,它包含了頁碼信息和分頁控件:

 <footer id="pagination-footer" class="panel-footer"><div class="row"><div class="col-sm-5 text-center"><small class="text-muted inline m-t-sm m-b-sm">showing 20-30 of 50 items</small></div><div class="col-sm-7 text-right text-center-xs"><ul class="pagination pagination-sm m-t-none m-b-none"><li><a href=""><i class="fa fa-chevron-left"></i></a></li><li><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=""><i class="fa fa-chevron-right"></i></a></li></ul></div></div></footer>

更新分頁DOM的代碼

現在,我們將使用模擬數據和原始DOM結構,編寫updatePaginationDOM函數來更新分頁導航:

/**
* 更新分頁的DOM
* @param data 響應數據
*/
function updatePaginationDOM(data) {var footer = $('#pagination-footer');footer.empty(); // 清空原有分頁DOMvar paginationHTML = `<div class="row">
<div class="col-sm-5 text-center">
<small class="text-muted inline m-t-sm m-b-sm">每頁 ${data.per_page} 個,共 ${data.total} 個</small>
</div>
<div class="col-sm-7 text-right text-center-xs">
<ul class="pagination pagination-sm m-t-none m-b-none">`;// 當前頁碼大于1 ,添加“上一頁”鏈接if (data.page > 1) {paginationHTML += `<li><a href="#" data-page-number="${data.page - 1}"><i class="fa fa-chevron-left"></i></a></li>`;}// 計算并添加頁碼鏈接const maxPagesToShow = 5; // 顯示的頁碼數量const startPage = Math.max(1, data.page - Math.floor(maxPagesToShow / 2));// 計算顯示的開始頁碼const endPage = Math.min(data.pages, startPage + maxPagesToShow - 1);// 計算顯示的結束頁碼console.log(startPage,endPage)// 如果開始頁碼大于1,顯示省略號和第一頁的鏈接if (startPage > 1) {paginationHTML += `<li><a href="#">1</a></li>`;if (startPage > 2) paginationHTML += `<li><span>...</span></li>`;}for (let i = startPage; i <= endPage; i++) {paginationHTML += `<li class="${i === data.page ? 'active' : ''}"><a href="#">${i}</a></li>`;}if (endPage < data.pages) {if (endPage < data.pages - 1) paginationHTML += `<li><span>...</span></li>`;paginationHTML += `<li><a href="#" >${data.pages}</a></li>`;}// 當前頁碼小于總頁數,添加“下一頁”鏈接if (data.page < data.pages) {paginationHTML += `<li><a href="#" data-page-number="${data.page + 1}" ><i class="fa fa-chevron-right"></i></a></li>`;}paginationHTML += `
</ul>
</div>
</div>
`;footer.html(paginationHTML);// 使用事件委托來綁定分頁鏈接的點擊事件$('#pagination-footer .pagination a').on('click', function (e) {e.preventDefault(); // 阻止鏈接的默認行為var pageNumber = $(this).data('page-number');if (pageNumber) {loadMovies(pageNumber); // 調用 loadMovies 函數return}var page = $(this).text(); // 從鏈接文本獲取頁碼if (page > 0) {loadMovies(page); // 調用 loadMovies 函數}});
}

代碼解釋

  1. 清空現有DOM:首先清空pagination-footer的內容,為新內容騰出空間。
  2. 構建分頁HTML:根據data對象構建新的分頁HTML,包括頁碼信息和分頁鏈接。
  3. 更新顯示信息:更新頁碼顯示信息,如“showing 20-30 of 50 items”,以反映當前的頁碼和總項目數。
  4. 添加分頁鏈接:根據當前頁碼和總頁數動態添加分頁鏈接,包括“上一頁”、“下一頁”和頁碼數字。
  5. 綁定點擊事件:為分頁鏈接添加點擊事件,當用戶點擊時,調用loadMovies函數加載對應頁的數據。

結論

通過上述步驟,我們可以看到如何使用JavaScript和jQuery動態更新分頁導航的DOM結構。通過理解不同的分頁場景,我們可以編寫出適應性強、用戶體驗佳的分頁邏輯。希望本博客能幫助你在實際開發中更好地實現分頁功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38106.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38106.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38106.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ (第二天上午---函數重載和缺省參數和占位參數)

一、函數重載 1、問題的引入 在實際開發中&#xff0c;有時候我們需要實現幾個功能類似的函數&#xff0c;只是有些細節不同。例如希望交換兩個變量的值&#xff0c;這兩個變量有多種類型&#xff0c;可以是 int、float、char、bool 等&#xff0c;我們需要通過參數把變量的地…

Executors 提供了哪些創建線程池的方法?

java.util.concurrent.Executors 是一個工廠類&#xff0c;提供了一些靜態方法來創建各種類型的線程池。這些方法簡單易用&#xff0c;可以快速創建常見的線程池類型。以下是 Executors 提供的主要創建線程池的方法及其特性&#xff1a; 1. newFixedThreadPool(int nThreads) …

計算機系統基礎(二)

1.數值數據的表示 為什么采用二進制&#xff1f; 二進制只有兩種基本狀態&#xff0c;兩個物理器件就可以表示0和1二進制的編碼、技術、運算規則都很簡單0和1與邏輯命題的真假對應&#xff0c;方便通過邏輯門電路實現算術運算 數值數據表示的三要素 進位記數制&#xff08;十…

以太網常用協議——ARP協議

文章目錄 一、 ARP協議與MAC層1.TCP/IP協議2. MAC地址3. ARP映射4. ARP請求和ARP應答 二、以太網幀格式三、ARP協議1. 以太網ARP通信測試&#xff1a; 以太網使用的協議很多&#xff0c;常用的有ARP、UDP等。 再介紹具體協議之前需要先知道一些基本的概念&#xff1a; 一、 AR…

COB顯示屏與GOB顯示屏封裝方式有哪些不同?

很多用戶因為使用場景的特殊性&#xff0c;所以會選擇防護能力更強的COB顯示屏或者是GOB顯示屏&#xff0c;兩種產品從名稱上看只是有一個字母的懸殊&#xff0c;其實使用的工藝截然不同&#xff0c;GOB顯示屏通常是在SMD顯示屏的基礎上進行升級&#xff0c;而COB顯示屏則是完全…

獨立開發者系列(15)——git的使用

上一篇14文章觸發了敏感話題&#xff0c;直接未過審核&#xff0c;看來技術博客也有敏感點。 大部分情況下&#xff0c;獨立項目是你一個人開發&#xff0c;但是當你接的項目比較大的時候&#xff0c;你需要其他人的幫忙&#xff0c;這個時候你要把代碼分享給別人。因為如果你…

【分布式數據倉庫Hive】Hive的安裝配置及測試

目錄 一、數據庫MySQL安裝 1. 檢查操作系統是否有MySQL安裝殘留 2. 刪除殘留的MySQL安裝&#xff08;使用yum&#xff09; 3. 安裝MySQL依賴包、客戶端和服務器 4. MySQL登錄賬戶root設置密碼&#xff0c;密碼值自定義&#xff0c;這里是‘abc1234’ 5. 啟動MySQL服務 6…

maven設置阿里云鏡像源(加速)

一、settings.xml介紹 settings.xml是maven的全局配置文件&#xff0c;maven的配置文件存在三個地方 項目中的pom.xml&#xff0c;這個是pom.xml所在項目的局部配置文件用戶配置&#xff1a;${user.home}/.m2/settings.xml全局配置&#xff1a;${M2_HOME}/conf/settings.xml 優…

YOLOV10訓練集制作+Train+Val記錄

代碼地址&#xff1a;THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection (github.com) 一、數據制作 在這篇文章有講過如何制作數據集及代碼實現 YOLOV9訓練集制作TrainVal記錄_yolov9 train yaml-CSDN博客 二、配置文件 &#xff08;1&#xff09;代碼結構…

“私域流量:解鎖電商新機遇,共創數字化未來“

一、私域流量的戰略意義再探 步入數字化浪潮的深處&#xff0c;流量已成為企業成長不可或缺的血液。與廣泛但難以掌控的公域流量相比&#xff0c;私域流量以其獨特的專屬性和復用潛力&#xff0c;為企業鋪設了通往深度用戶關系的橋梁。它不僅賦能企業實現精準營銷&#xff0c;…

國產跨平臺高性能遠程控制軟件 RayLink,暢享高清流暢遠程辦公

不管是手機還是電腦&#xff0c;出色的硬件是好用的基礎。而其中的軟件工具&#xff0c;也是提高效率、減輕負擔的好東西。 免費的軟件工具眾多&#xff0c;當然付費工具也不少。大家可能會覺得正版軟件很貴&#xff0c;但國內軟件代理商的價格其實很實惠。 本次為大家介紹一…

CF1375D Replace by MEX 題解

題目大意 令 m e x mex mex 為序列中最小的沒有出現的數。 給你一個長度為 n n n 的序列 a a a&#xff0c;你可以進行不超過 2 n 2\times n 2n 次操作&#xff0c;使得序列 a a a 單調不降。每次操作你可以選定一個位置 p p p&#xff0c;并將 a p a_p ap? 賦值為 …

一文看盡AI繪畫工具 Stable Diffusion發展史,AI繪畫究竟發展到什么地步了?!

01、引言 Stable Diffusion 在短短兩年內發布了多個版本。最著名的版本是 1.5 和 SDXL。不過&#xff0c;還有許多其他版本值得一提。讓我們一起來探索穩定擴散模型的起源和發展。 閑話少說&#xff0c;我們直接開始吧&#xff01; 02、缺失的SD V1.0版本 Stable Diffusion…

材質相關內容整理 -ThreeJs

在Three.js中&#xff0c;材質是用來定義3D對象外觀的關鍵部分。Three.js支持多種材質文件和類型&#xff0c;每種材質都有其特定的用途和優勢。下面簡單整理了一下目前Three.js支持的材質文件和類型。 一、Three.js支持的材質文件類型 JPEG (.jpg) 和 PNG (.png) 用途&#x…

iphone新機官網驗機流程

若您想購買新款iPhone并在官方網站上驗證機器的真實性&#xff0c;可以按照以下流程進行&#xff1a; 打開蘋果官方網站&#xff08;https://www.apple.com&#xff09;。在導航欄中選擇“iPhone”選項&#xff0c;進入iPhone的產品頁面。在頁面中找到您想要購買的新款iPhone&…

C語言快速學習筆記

學習網站&#xff1a;C 語言教程 | 菜鳥教程 (runoob.com)C 語言教程 | 菜鳥教程 (runoob.com)C 語言教程 | 菜鳥教程 (runoob.com) 這個網站知識完整&#xff0c;講解清晰。 在線C語言編程工具&#xff1a;菜鳥教程在線編輯器 (runoob.com) 國外學習網站&#xff1a;C語言介…

【機器學習】機器學習的重要方法——線性回歸算法深度探索與未來展望

歡迎來到 破曉的歷程博客 引言 在數據科學日益重要的今天&#xff0c;線性回歸算法以其簡單、直觀和強大的預測能力&#xff0c;成為了眾多領域中的基礎工具。本文將詳細介紹線性回歸的基本概念、核心算法&#xff0c;并通過五個具體的使用示例來展示其應用&#xff0c;同時探…

使用conda創建虛擬環境,并將虛擬環境加載到jupyter notebook中【已解決】

使用conda創建虛擬環境&#xff0c;并將虛擬環境加載到jupyter notebook中【已解決】

免費分享:2000-2021年全國分省250mNDVI數據集(附下載方法)

NDVI (Normalized Difference Vegetation Index)歸一化植被指數&#xff0c;又稱標準化植被指數。是目前應用最廣泛的植被指數&#xff0c;與植被的分布呈線性相關&#xff0c;是植被生長狀態和空間分布的最佳指示因子&#xff0c;也是遙感估算植被覆蓋度(FVC&#xff0c;Fract…

深入學習 Kafka(2)- Partition 和 Topic

1. Partition的作用 Topic是邏輯的概念&#xff0c;Partition是物理的概念&#xff1a; Partition 對一個 Topic 的消息進行物理上的分離&#xff0c;讓消息可以分布在不同的實體機器上&#xff0c;可以提升系統吞吐量和并行處理能力。每個Partition可以有多個副本&#xff08…