jQuery.each()的5個案例

cheung_seol發表於2016-04-10

本文將對 jQuery each() 函式作一個比較全面的介紹。 each() 函式是 jQuery 中最重要也是最常用的函式之一。通過本文你將明白為什麼 each() 函式如此大放異彩,同時還將詳細介紹如何使用 each() 函式。

什麼是 jQuery .each()

jQuery 的 each() 函式用來遍歷目標 jQuery 物件中的所有元素。在這裡解釋一下什麼是 jQuery 物件,以防有讀者還不太清楚。 jQuery 物件指的是包含一個或多個 DOM 元素的物件,並且暴露出所有的 jQuery 函式。 each() 函式非常適合操作多元素的 DOM 、任意陣列的迴圈以及物件的屬性。除了這個函式, jQuery 裡還有一個同名的輔助函式,不需要事先選擇或建立 DOM 元素就可以呼叫這個輔助函式。在接下來的部分將更詳細地介紹它們。

jQuery 的 .each() 語法

這裡將結合實際例子講解 .each() 的不同用法。

下面這個例子選中了網頁上所有 div 標籤,並列印每個 div 標籤的 index 和 ID。輸出的結果可能是: “div0:header”、 “div1:body”、 “div2:footer”。 jQuery 中 each() 函式的這種用法和效用函式的用法完全不同。

下一個例子展示了效用函式的用法。在這個例子當中,把被迴圈的物件當作 each() 函式的第一個引數。這個例子展示瞭如何遍歷一個陣列:

最後這個例子中,遍歷了一個物件中的所有屬性:

這一切都歸結為提供了適當的回撥函式。這個回撥函式的上下文, this ,等於它的第二個引數,也就是當前的 value 值。通常上下文都是一個物件,所以得把原始值封裝起來。也就是說,這個 value 值和上下文之間不存在嚴格相等關係。 回撥函式的第一個引數是當前的 index,它可能是陣列裡一個數字或物件中一個字串。

1.基本的 jQuery.each() 例項

一起來看看 each() 函式是如何處理一個 jQuery 物件的。第一個例子中選擇了頁面中所有的 a 標籤,並列印出它們的 href 屬性。

第二個例子中輸出了網頁上所有的外鏈 href 屬性(這裡我們假設只用了 HTTP 協議):

假設當前頁面中有如下這些連結:

那麼第二個例子將輸出如下結果:

需要注意的是, 在 each() 當中使用 jQuery 物件的 DOM 元素時,必須對這些 DOM 元素再次封裝。這是因為 jQuery 實際上只是將 DOM 元素封裝成陣列。使用 jQuery each() 方法其實就是像普通陣列那樣迭代這個陣列。因此,無法在迭代器裡得到封裝好的元素。

2. jQuery.each() 陣列例項

首先看看 each() 是如何處理一個普通陣列的。

這段程式碼輸出的結果是:0:11:22:33:44:5, 和 5:6

這段程式碼沒有特別的。陣列帶數字索引,所以我們從0開始向後取數字,一直取到 N – 1,其中 N 是這個陣列中元素的個數。

3. jQuery.each() JSON 例項

有時可能遇到更復雜的資料結構,比如陣列包含陣列、物件包含物件、物件包含陣列,或者陣列包含物件。這些情況下, each() 方法是如何發揮作用的呢?

這個例子的輸出結果是 red=#f00green=#0f0blue=#00f

我們用巢狀呼叫 each() 方法,來處理這種巢狀結構。外層的 each() 呼叫是用來處理變數名為 JSON 的陣列,內層的 each() 呼叫是用來處理巢狀在陣列中的物件。本例當中,每個物件只有一個屬性,但是一般來說有多個屬性也是可以的。

4.jQuery.each() 類例項

這個例子展示了在下面 HTML 程式碼中,如何遍歷所有 class 屬性為 productDescription 的元素。

我們使用 each() 輔助函式,取代在選擇器中用 each() 方法。

本例中的輸出結果是0:Red, 1:Orange, 2:Green

我們不一定非要帶上 index 和 value。它們只是用來幫助判斷當前正在迭代處理的 DOM 元素的引數。而且,這種情況下也能更方便的使用 each 方法。可以簡寫成這樣:

在控制檯上得到的結果如下:

同樣地,必須把 DOM 元素封裝到在一個新的 jQuery 例項中。使用 text() 方法將元素的文字輸出。

5. jQuery .each() 延遲例項

在下面的這個例子中,當使用者點選 ID 為 5demo 的元素時,所有的列表元素都會馬上變成橙色。然後元素根據 index 值設定延遲時間 (0, 200, 400, … 毫秒) 逐個淡出。

結論

程式設計時應該儘可能多地使用 each() 函式,這種高效的方法能為我們節省大量時間。除了 jQuery 之外,還可以使用 ECMAScript 5 陣列中的 forEach() 方法。

謹記$.each()$(selector).each() 是用不同方式定義的兩種不同的方法。

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

任選一種支付方式

jQuery.each()的5個案例 jQuery.each()的5個案例

相關文章