2011-08-24 145 views
58

我在noConflict模式下使用jQuery v1.6.1。jQuery ID選擇器(「#id」)返回數組

我使用id選擇器(如$j("#divID").value)來獲取存儲項目的值。

不幸的是,$j("#inputID")正在返回一個項目列表,所以我必須使用$j("divID")[0].value來獲取對象的值。 [0]似乎沒有必要,因爲根據定義,只有一個具有任何給定id的html元素。

這是從IDed對象獲取值的適當方式嗎?或者,還有更好的方法?

謝謝!

+0

您的意思是不是'.val()'? – user113716

+1

如果'#divID'確實指向'div',那麼'value'或'.val()'不起作用。只有表單元素具有「價值」屬性。 –

+0

好點,@Felix。我糾正了這個問題。 – Richard

回答

93

$j("#divID").val()將工作得很好。

根據jQuery documentation,.val()將返回匹配元素集合中第一個元素的值。

從概念上理解jQuery是如何工作的,以便了解它爲什麼以這種方式工作是值得的。任何選擇器查詢的結果都是一個jQuery對象。這就是包含jQuery提供的無數方法的jQuery對象。 .val()是其中一種方法,如.fadeIn(),.hide()等...這些方法不是DOM對象上的方法,而是jQuery對象的方法。由於jQuery對象具有通用性,並且可以在其內部數組中保存0個,1個或多個DOM對象,因此無論結果中是否有0個,1個或多個DOM對象,您都會從jQuery選擇器調用中返回相同的jQuery對象。

因此只包含一個對象的$j("#divID")返回與$j(".rows")相同類型的對象,其中可能包含數百個DOM對象。這極大地簡化了jQuery編程,因爲根據從選擇器查詢返回的對象數量,您不必採取不同的處理方式。

當您參考$j("divID")[0]時,您將訪問jQuery對象內部的DOM對象數組(在選擇器查詢中填充)並獲取該數組中的第一個DOM對象。在這一點上,你有一個正常的DOM對象,而不是一個jQuery對象,你可以使用普通的DOM方法或屬性。有時候這是必需的(以獲取實際的DOM對象),但通常,使用jQuery在jQuery對象上提供的方法更容易。使用它們有很多優點,例如可以將多個請求鏈接到大多數方法,並且它會自動遍歷其內部數組中的所有DOM對象。

例如,你叫這個:$j("rows-even").hide()並且有20行的那個類,那麼所有這些都將被hide()方法操作,沒有比這更多的代碼。你可以像這樣鏈接多個方法:$j("rows-even").slideUp().slideDown()。在這種情況下,您正在運行動畫,並且jQuery將這兩個動畫鏈接在一起,當第一個動畫完成時自動啓動第二個動畫。在許多情況下它都非常有用,並且可以節省大量通常必須使用普通JS編寫的代碼。

+0

太棒了,謝謝! – Richard

+0

+1不錯,完整答案。 –

+0

+1很好的答案。 – Usman

3

$j("#divID")返回jQuery對象。爲了得到所選元素的值,你必須調用它的val方法來獲取值。

使用$j("#divID").val();