2011-04-30 32 views
1

我一直在想一會兒jQuery如何在多個選擇器上執行操作。例如:jQuery如何作用於多個選擇器?

$("p").css({"border":"1px solid #000"}); 

在所有p標籤上執行後續功能。我已經瀏覽了jQuery源代碼,但說實話,當你試圖找出一個特定的功能時,它是一個廣泛的閱讀。我的假設是有某種類型的堆棧,因此css()和其他函數僅僅作用於當前堆棧,這是由選擇器函數所規定的。

除此之外,我不知道如何它可以作爲,我認爲複製的,有在javascript無法返回多個對象上執行的功能。例如。

House.first_bedroom.size = "large" 
House.second_bedroom.size = "small" 
House.all_rooms().alertSize(); 

alertSize()將必須是對象的一些集合,而不是每個房間對象的成員函數,它是由all_rooms返回的成員函數()?

回答

3

首先,jQuery函數(一般)返回一個jQuery對象,它的作用就像一個數組,並跟蹤當前的組匹配元件。其次,在內部,每個jQuery函數廣泛使用each()函數遍歷匹配的對象,執行後續動作並構造新的jQuery對象以返回。有些函數會返回jQuery之外的其他東西,比如get()。這些功能不能鏈接。鏈接只有當函數返回一個jQuery對象時纔有可能。由於返回的對象是一個jQuery對象,因此它具有jQuery可用的所有功能。

0

也許DOM被解析並且匹配標準的所有元素被添加到陣列中?或..更有效的東西? :)

類似地,對於事件處理,處理程序被分配給陣列中的每個元素?

我只是在這裏黑暗中刺傷。

+0

但是如何調用數組的每個元素的函數?例如'[「foo」,「bar」]。someFunc()'在整個數組上執行someFunc而不是單個元素,但是jQuery設法在每個元素上執行它的函數 – Dormouse 2011-04-30 12:47:59

+0

就像我說過的那樣,函數/處理函數被賦值到數組中的每個元素 - 所以你會得到如下的東西:foo.click = someFunc和bar.click = someFunc。 – Kon 2011-04-30 13:05:43

1

jQuery的構造函數($(...))總是返回一個jQuery對象。你可以把它看作一個奇特的數組。選擇的項目被存儲(看起來像這在源中稱爲上下文)。

所以,那麼你的對象,我們在調用函數的CSS ...查看jQuery.fn.css源。它基本上調用一個函數來執行上下文中每個項目的委託(設置或獲取css)。