2012-12-15 57 views
5

我想增加我對jQuery的理解。請考慮下面的代碼。使用jQuery集合

if ($('.myClass').data('id') == '123') { 
} 

這是如何工作的?它看起來很簡單,直到你明白$()返回一組元素。那麼上面的代碼究竟做了什麼?如何比較這樣的元素的集合的data-id屬性值?

(我知道我可以使用each()集合中明確測試的每個元素我的問題是關於什麼上面的代碼一樣。)

+1

'.data('id')'返回集合中第一個項目的值。您是否在問如何測試集合中的_all_項是否具有該特定數據值? – nnnnnn

+1

@nnnnnn + 1,但我認爲OP(正確)評論說它不清楚從[documentation](http://api.jquery.com/data/)data'(obj)'返回值爲第一個匹配的元素。 –

+0

不,我會問,如果這是我想知道的。所以也許你在評論的第一部分回答了這個問題。 –

回答

2

.data('id')返回集合中的第一個項目的價值,但.data('id','xyz')將設定值集合中的所有項目 - 許多相同的行爲,其它的jQuery方法,如.html().text()

它可能似乎沒有什麼意義,只是在類似的if聲明中測試第一個,但對於知道只有一個元素的情況,例如當您的選擇器是id時,或者在內部使用$(this).data('id')時更有意義事件處理程序或其他。

如果你問如何測試集合中的所有項目是否有一個特定的數據值,你可以這樣做:

var $col = $('.myClass'); 
if ($col.length === $col.filter(function(){return $(this).data('id') === '123';}).length) { 
    // do something 
} 

或者,如果你只是想知道,如果至少一個具有數據值:

if ($('.myClass').filter(function(){return $(this).data('id') === '123';}).length > 0) { 
    // do something 
} 
+0

我更新了我的問題以使其更清晰好,對集合中的第一項進行操作很酷,不僅易於理解,而且表現完全符合我的願望它來。 –

0

您可以使用jQuery。每() - http://api.jquery.com/jQuery.each/

例在註釋中,因爲stackoverflow不喜歡jsFiddle那麼多。

+0

http://jsfiddle.net/ByUeE/ – daniel

+0

對不起,我猜在我的問題的措辭中有些含糊不清。我已經更新了它,以便更清楚 –

1

我相信如果你試圖通過jquery函數獲取值,它將返回集合中第一個項目的值。例如,如果您有:

<div class='1'></div> 
<div class='2'></div> 
<div class='3'></div> 

並運行:

$('div').attr('class'); 

它將返回 「1」。我不知道這是否通過所有jQuery函數是統一的,但這是預期的行爲。