jQuery 遍歷:思路總結,項目場景中如何處理/控制獲取的 each 遍歷次數?

文章目錄

  • 前言
  • 一、項目場景分析
  • 二、實體類定義描述(僅關鍵代碼)
    • 2.1、實體類定義描述
    • 2.2、邏輯處理與分析
    • 2.3、遍歷數據如何修改的問題暴露
  • 三、處理思路
    • 3.1、源碼分析 jQuery 中的 each 遍歷
    • 3.2、如何解決 jQuery 中控制獲取 each 的遍歷次數
  • 總結


前言

前臺接收到的數據即為 data,里面默認在一個 page 頁面顯示的是 6 條數據,個別頁面可能直接取 6 條數據能夠滿足我們的需求,但是如果我們在其他頁面也從 data 中取數據,數據條數就可能不是 6 條(這里僅說明<=6條的情況——根據實體類的定義走),當我們直接使用 jquery 進行 each 遍歷的時候,直接遍歷的結果就是 6 條,很有可能就不滿足我們的需求,所以,如果在不改變實體類、CSS 樣式的情況下,對在 jquery 中獲取 each 的遍歷次數的控制就是最好的實現方法。

在這里插入圖片描述


一、項目場景分析

今天在做一個項目時,遇到了列表遍歷的一個問題:定義一個實體類 Page,數據寫死,默認每頁顯示 6 條數據,通過 service 處理 dao 查詢數據庫的結果,在當前 new 的對象 page 中存放 6 條數據并返給 servlet,servlet 通過返回 json 的形式將 page 對象返回給前臺。

前臺接收到的數據即為 data,里面默認在一個 page 頁面顯示的是 6 條數據,個別頁面可能直接取 6 條數據能夠滿足我們的需求,但是如果我們在其他頁面也從 data 中取數據,數據條數就可能不是 6 條(這里僅說明 <= 6 條的情況——根據實體類的定義走),當我們直接使用 jquery 進行 each 遍歷的時候,直接遍歷的結果就是 6 條,很有可能就不滿足我們的需求,所以,如果在不改變實體類、CSS 樣式的情況下,對在 jquery 中獲取 each 的遍歷次數的控制就是最好的實現方法。

二、實體類定義描述(僅關鍵代碼)

2.1、實體類定義描述

我們對數據進行分頁操作,定義一個實體類 Page,數據寫死,默認每頁顯示 6 條數據,代碼如下:

public class Page {private Integer totalPage;// 總頁數private Integer totalCount;// 總數據條數private Integer currentPage;// 當前頁碼private Integer pageCount = 6;// 每頁顯示條數private List<Route> list;// 每頁實際路線數據
}

2.2、邏輯處理與分析

通過 dao 從數據庫查詢數據,由 service 進行處理分頁邏輯并將數據 return 給 servlet,代碼如下:

public Page pageQuery(String cid, int cp) {Page page = new Page();//封裝5個數據//總條數int totalCount = dao.findTotalCount(cid);page.setTotalCount(totalCount);//當前頁碼page.setCurrentPage(cp);//每頁顯示條數//固定每頁顯示6條//總頁數/*** 總條數	每頁顯示條數	總頁數* 29		6		5* 30		6		5* 31		6		6*/int totalPage;if (totalCount % 6 == 0) {totalPage = totalCount / 6;}else {totalPage = totalCount / 6 + 1;}page.setTotalPage(totalPage);//每頁實際數據List<Route> list = dao.findList(cid,cp,page.getPageCount());page.setList(list);return page;
}

servlet 將獲取到的 page 對象變成 json 形式的字符串發送給前臺,前臺即接收到處理后的數據 data,代碼如下:

Page page = service.pageQuery(cid,cp);
//把數據傳給前臺
ObjectMapper om = new ObjectMapper();
//把對象變成json形式的字符串
String s = om.writeValueAsString(page);
//發送給前臺
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(s);

我們直接使用 jquery 進行 each 遍歷的時候,直接遍歷的結果就是 6 條,代碼如下:

//在添加之前清空之前的數據
$("#popularityroute").html("");
$(data.list).each(function(index,element){var li = '<div class="col-md-3">\n'+'<a href="javascript:;">\n'+'<img src="images/jiangxuan_4.jpg" alt="">\n'+'<div class="has_border">\n'+'<h3>上海直飛三亞5天4晚自由行(春節預售+親子/蜜月/休閑游首選+豪華酒店任選+接送機)</h3>\n'+'<div class="price">網付價<em></em><strong>1</strong><em></em></div>\n'+'</div>\n'+'</a>\n'+'</div>';//添加到ul里面$("#popularityroute").append(li);
})

遍歷結果如下圖所示:

在這里插入圖片描述

2.3、遍歷數據如何修改的問題暴露

但是如果我們在其他頁面也從 data 中取數據,數據條數就可能不是 6 條(這里僅說明 <=6 條的情況——根據實體類的定義走),當我們直接使用 jquery 進行 each 遍歷的時候,直接遍歷的結果就是 6 條,很有可能就不滿足我們的需求。我們就需要取 4 條數據顯示在本頁面,如下圖所示:

在這里插入圖片描述
而如果不對遍歷結果進行處理,就是這樣的情況,如下圖所示:

在這里插入圖片描述
很明顯,這是完全不符合我們需求的,這破壞了頁面的結構,小心被前端程序員打死哦

在這里插入圖片描述
那么為了避免矛盾產生作為 Java 程序員的我們就要對遍歷的結果進行處理了。

三、處理思路

3.1、源碼分析 jQuery 中的 each 遍歷

首先我們先來熟悉一下這個 jquery 中的 each 遍歷,代碼如下:

//在添加之前清空之前的數據
$("#popularityroute").html("");
$(data.list).each(function(index,element){var li = '<div class="col-md-3">\n'+'<a href="javascript:;">\n'+'<img src="images/jiangxuan_4.jpg" alt="">\n'+'<div class="has_border">\n'+'<h3>上海直飛三亞5天4晚自由行(春節預售+親子/蜜月/休閑游首選+豪華酒店任選+接送機)</h3>\n'+'<div class="price">網付價<em></em><strong>1</strong><em></em></div>\n'+'</div>\n'+'</a>\n'+'</div>';//添加到ul里面$("#popularityroute").append(li);
})

我們通過console.log來輸出一下返給前臺數據data的內容,一共是 5 個參數,包含一個存了 6 條數據的list集合,如下圖所示:

在這里插入圖片描述
通過data.list來獲取list的參數,我們再通過console.log來輸出一下list的內容以及index索引,每個list即為一個li,由于數據并未處理,所以是 6 條相同的數據,而現在我們僅需要顯示前 4 條數據即可,如下圖所示:

在這里插入圖片描述
在這里插入圖片描述

3.2、如何解決 jQuery 中控制獲取 each 的遍歷次數

顯而易見,現在我們只需要對數據的索引進行判斷即可。比如如上頁面我們僅需要前 4 條數據,我們就可以通過控制索引的值來控制顯示數據的條數——達到設定索引值結束遍歷。如下圖所示:

在這里插入圖片描述
解決方式:index 的索引默認是從 0 開始計,顯示 4 條數據我們只需要在索引值達到 3 時把遍歷停掉即可:

if(index>3){return true;
}

補充:這里使用了 jquery 跳出 each 循環的功能。我們在 Java 中熟悉的是 breakcontinue

而在 jquery 中使用的是:

  • return false——跳出所有循環;相當于 javascript 中的 break 效果
  • return true——跳出當前循環,進入下一個循環;相當于 javascript 中的 continue 效果

這樣就滿足了我們的需求,同時也不改變后端邏輯與代碼,也不會破壞前端頁面結構,結果如下圖所示:

在這里插入圖片描述


總結

優點:通過這個方法,我們基本就可以忽略在實體類中定義的默認一個 page 顯示多少條數據的約束,以實體類中的約束作為最大限制即可,只要是在這個范圍內的數據我們都可以控制和取到。既也不改變后端邏輯與代碼,也不會破壞前端頁面結構。 缺點:多余的數據會被隱藏掉,所以在分頁中不建議使用,會造成丟失數據的情況。如果僅使用前幾條數據進行限制還是沒有任何問題的。

在這里插入圖片描述


我是白鹿,一個不懈奮斗的程序猿。望本文能對你有所裨益,歡迎大家的一鍵三連!若有其他問題、建議或者補充可以留言在文章下方,感謝大家的支持!

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

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

相關文章

JavaScript 事件:Web 表單如何實現禁用右鍵、復制粘貼/剪切和輸入框自動填充?

文章目錄前言一、禁用鼠標右鍵1.1、分析說明1.2、操作原理1.3、實現效果1.4、實現代碼1.5、補充&#xff1a;JS 中的 button 事件屬性二、禁用復制粘貼2.1、分析說明2.2、實現代碼三、禁用輸入框自動填充功能3.1、分析說明3.2、實現效果3.3、實現代碼總結前言 我們在項目中&…

MySQL 模糊查詢:MySQL 數據庫 like 語句通配符模糊查詢小結

MySQL 報錯&#xff1a;Parameter index out of range (1 &#xff1e; number of parameters, which is 0)——MySQL 數據庫 like 語句通配符模糊查詢小結 文章目錄MySQL 報錯&#xff1a;Parameter index out of range (1 &#xff1e; number of parameters, which is 0)——…

內網擊穿之 HTTP 穿透:網站沒上線?如何讓全世界的人都可以訪問你本地的網站?

文章目錄前言一、內網穿透原理與工具介紹1.1、內網穿透工作原理1.2、內網穿透工具介紹二、啟動內網穿透工具2.1、命令及配置介紹2.2、查看映射信息三、進行訪問測試3.1、遠程訪問本地站點資源3.2、關閉內網穿透總結前言 對于大多數程序員來說&#xff0c;網站一經開發測試后&am…

SSM 整合 3:一個 Spring 入門程序帶你來了解什么是控制反轉(IoC)/依賴注入(DI)?

文章目錄 前言一、使用 Eclipse 創建動態 Web 項目并導入所需 jar 包二、創建接口 TestDao 和實現類2.1、創建接口 TestDao2.2、創建接口的實現類 TestDaoImpl三、創建 Spring 配置文件 applicationContext.xml3.1、如何從官方文檔找配置文件約束信息四、創建測試類并輸出運行結…

軟件設計原則:內聚、耦合有哪幾種類型?內聚度、耦合度如何比較?

文章目錄前言一、何為內聚&#xff1f;1.1、7 種內聚類型及其描述二、何為耦合&#xff1f;2.1、7 種耦合類型及其描述總結前言 高內聚、低耦合是我們在軟件設計過程中必須遵循的一個重要原則&#xff0c;在整個軟件工程中占有很大的比重。而對于內聚和耦合你還是僅僅局限于“高…

數據庫管理工具:如何使用 Navicat Premium 轉儲(導出)和運行(導入)*.sql 文件?

文章目錄前言一、轉儲&#xff08;導出&#xff09;數據庫 SQL 文件1.1、選擇“轉儲 SQL 文件”1.2、選擇導出文件存放位置1.3、查看轉儲 SQL 文件界面1.4、查看 SQL 輸出文件1.5、查看輸出文件詳情信息二、運行&#xff08;導入&#xff09;數據庫 SQL 文件2.1、新建數據庫2.2…

JSP 編譯原理:JSP 是 Servlet?如何用 Eclipse 查看 JSP 編譯生成的 Servlet 源文件?

文章目錄前言一、JSP 文件編譯流程原理二、創建并運行待測試 JSP 頁面三、查找 JSP 編譯文件輸出位置3.1、打開動態項目運行配置3.2、查看 JSP 編譯文件輸出位置3.3、查看 JSP 編譯輸出文件四、JSP 編譯輸出 Servlet 的論證五、訪問 JSP 文件的流程總結前言 相信大家都了解&…

MVC 模式/Servlet/JSP 編譯原理剖析:Servlet 組件到底屬于 MVC 模式的哪一層?

文章目錄前言一、回憶什么是 MVC 模式&#xff1f;1.1、Model、View、Controller 組件介紹1.2、明確 View 與 Controller 組件區別二、什么是 Servlet&#xff1f;2.1、Servlet 的組件定義2.2、Servlet 組件處于 Controller 層&#xff1f;三、老師說 Servlet 是 View 層的&…

操作系統原理:進程 PV 操作如何計算?全網最全三種前驅圖計算類型總結

文章目錄前言一、PV 操作定義1.1、P 操作定義1.2、V 操作定義二、串聯進程&#xff08;單線前驅圖&#xff09;2.1、什么是單線前驅圖&#xff1f;2.2、如何計算單線前驅圖的 PV&#xff1f;2.2.1、計算前驅節點 PV2.2.2、計算中間節點 PV2.2.3、計算尾節點 PV三、并聯進程&…

Spring 容器:三種方式解決 Resource leak: ‘applicationContext‘ is never closed 問題

文章目錄前言一、Spring 容器警告產生的場景二、Spring 容器未關閉后果分析2.1、肉眼可見的警告2.2、導致的內存泄漏2.2.1、什么是內存泄漏&#xff1f;2.2.2、如何判斷內存泄漏&#xff1f;2.2.3、Java 中的 GC&#xff08;垃圾回收&#xff09;2.2.4、Java 中會導致內存泄漏的…

SSM 整合 4:Spring IoC 容器基于的兩個重要接口 BeanFactory 和 ApplicationContext

文章目錄 前言一、BeanFactory 接口1.1、加載 Spring 配置文件創建 BeanFactory 接口實例1.2、開發中的運用以及使用說明二、ApplicationContext 接口2.1、ClassPathXmlApplicationContext 創建接口實例2.2、FileSystemXmlApplicationContext 創建接口實例2.3、通過 Web 服務器…

SRA 案例:關于華為開發者聯盟基礎服務文檔內容的改進建議(華為開發者聯盟文檔深度體驗官)

文章目錄前言一、文檔中心的外鏈跳轉問題1.1、問題描述1.2、造成的問題1.3、改進建議二、圖片失真和無法放大查看問題2.1、問題描述2.2、造成的問題2.3、改進建議三、個別 SDK 詞匯缺少必要的說明3.1、問題描述3.2、造成的問題3.3、改進建議四、郵箱信息的優化4.1、問題描述4.2…

騰訊位置服務:有何優勢?如何使用平臺創建應用和服務調用的 Key?

文章目錄前言一、騰訊位置服務的優勢1.1、提供豐富的地圖產品1.2、提供行業解決方案1.3、提供其他生態維度的支持1.4、海量的數據基礎1.5、豐富的開發文檔二、初識騰訊位置服務2.1、用戶的注冊與登錄&#xff08;附專屬邀請碼&#xff09;2.2、開發者信息的完善三、創建服務平臺…

畢業生當頭一棒?憶本科四年,高校畢業生與就業單位基本要求差多少?工作還是考研?

文章目錄前言一、大學本科前兩年的生活1.1、庸庸碌碌、中規中矩1.2、收獲了愛情二、大三的改變2.1、學會自律2.2、學會自我總結2.3、眼光要具有前瞻性三、畢業答辯3.1、個人設計答辯3.2、團隊設計答辯四、南京之行4.1、銘記歷史&#xff0c;感恩先輩4.2、加強自我認知與提升五、…

Gitee 答疑:為什么從 Gitee 平臺 Pull 代碼到 STS/Eclipse 后文件亂碼?逐步排查

文章目錄前言一、產生亂碼場景1.1、錯誤描述1.2、解決思路二、解決方式2.1、檢查 Git 平臺上的源碼2.2、Git 的運行原理2.3、修改 IDE 的文本編碼格式2.4、重新打開目的文件問題解決2.5、仍存在問題看這里&#xff08;重新拉區合并&#xff09;總結前言 我們從 Gitee 平臺 Pull…

flash 異常修復:QQ 的 flash 圖標顯示異常?QQ 秀、表情加載異常?一招解決

文章目錄前言一、產生錯誤場景1.1、flash 圖標顯示異常1.2、解決思路二、安裝合適版本的 Flash Player2.1、選擇合適版本的 Flash Player2.2、安裝 Flash Player三、重啟 QQ 客戶端四、flash 動畫加載異常4.1、動畫加載異常原因分析4.2、下載安裝 flash 修復工具4.3、使用 Flas…

電腦廣告多?Windows 自帶惡意軟件刪除工具還不會使用?有必要安裝殺毒軟件嗎?

文章目錄前言一、啟動惡意軟件刪除工具二、掃描類型的選擇三、啟動軟件掃描四、惡意軟件刪除工具的說明五、對于惡意軟件處理的建議總結前言 可能有些小伙伴發現&#xff0c;哎&#xff1f;為什么我的電腦彈窗廣告這么多&#xff1f;難不成小視頻看多了&#xff1f;電腦中毒了&…

《軟件項目管理(第二版)》第 8 章——項目團隊與干系人 重點部分總結

文章目錄 前言一、簡答題二、論述題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 8 章——項目…

《軟件項目管理(第二版)》第 7 章——項目風險管理 重點部分總結

文章目錄 前言一、單選題二、填空題三、簡答題四、論述題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二…

《軟件項目管理(第二版)》第 6 章——項目質量管理 重點部分總結

文章目錄 前言一、單選題二、判斷題三、簡答題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 6…