2012-01-30 69 views
6

下面的代碼行來自官方的dialog/#modal-form example

allFields = $([]).add(name) 

可能有人請澄清一下$([])呢?是否與$("*")相同?

另一件困惑的事情是,我沒有看到allFields被添加/追加到任何地方/任何對象,它只被創建和修改。我錯過了什麼嗎?

回答

3

的jQuery對象如果你看一看的doco for the jQuery() function - 通常被視爲速記版本$() - 你會看到它接受幾種不同類型和參數的組合。

語法你詢問:

​​

jQuery(elementArray)語法,可以傳遞DOM元素的陣列,其中所述回報將是一個jQuery對象包裹的那些元素。通過傳遞一個空數組,你基本上會得到一個空的jQuery對象(就像你傳遞一個不匹配任何內容的選擇器字符串一樣,但沒有先試圖找到匹配的低效率)。

當創建allFields具有添加到它(其中nameemailpassword被之前只是作爲包含每一個DOM元素jQuery的對象創建的)3個DOM元素:

allFields = $([]).add(name).add(email).add(password) 

據推測添加個體的優點項目,而不是僅僅做:

allFields = $("#name,#email,#password") 

的是,還需要每個元素的各個對象,並會一直所創建的,所以沒必要麻煩通過查詢字符串重新選擇它們。

另一件事困惑我的是,我沒有看到allFields添加/追加到任何地方/任何對象,它只是創建和修改,我失去的東西嗎?

它是在代碼中的其他兩個地方簡稱:

allFields.removeClass("ui-state-error"); 
// and, later 
allFields.val("").removeClass("ui-state-error"); 

這是相當標準的jQuery使用以除去一類或一組在jQuery對象的所有元素的值。不需要將它添加到其他對象。

5

$([])創建一個空的jQuery對象,就像$()一樣。 $('*')創建了一個jQuery對象,該對象包含所有匹配CSS選擇器*的元素,每個元素都將匹配。

換句話說,$([])一無所獲,$('*')得到一切。

1

的jQuery(elementArray)

elementArray:含組DOM元素在 jQuery對象來包裝的數組。

$([]) create zh_cn包裝在jQuery對象中的空集。

1

看起來你指的是以下行:

var name = $("#name"), 
    email = $("#email"), 
    password = $("#password"), 
    allFields = $([]).add(name).add(email).add(password) 

這裏發生的事情是,他們選擇的三大要素,現在他們希望創建一個jQuery對象引用的所有三個。

這是相同的,除了它們避免了選擇器的呼叫的情況如下:

allFields = $("#name, #email, #password") 

在本質上,它們創建了$([])然後所附,姓名,電子郵件和密碼中的零元素jQuery對象所以最終目的是長度3