2011-01-28 75 views
0
<input type="radio" id="rad1" name="group" value="one">First Option</input><br> 
<input type="radio" id="rad2" name="group" value="two">Second Option</input><br> 
<input type="radio" id="rad3" name="group" value="three">Third Option</input><br> 

<br> 

<input type="radio" id="rad7" name="group2" value="one">First Option</input><br> 
<input type="radio" id="rad8" name="group2" value="two">Second Option</input><br> 
<input type="radio" id="rad9" name="group2" value="three">Third Option</input><br> 

下面的語句是truejQuery選擇問題

$('[value="one"]').length == 2 

$('[name="group2"]').length == 3 

那麼怎麼來的..

$('[value="one"]',$('[name="group2"]')).length == 0 

我會認爲這應該有效地看所有與name==group2元素value=="one"1。爲什麼不是這種情況?

回答

4

這個選擇器,使用第二個參數爲範圍/上下文:

$('[value="one"]', $('[name="group2"]')) 

試圖找到[value="one"]元素從與[name="group2"]元件下降。這意味着你最終會在DOM中查看至少兩個不同的元素。

在你的情況,你的單選按鈕有兩個屬性,所以要重視這兩個屬性選擇,而不是(我加input只是爲了節省jQuery的一些工作):

$('input[name="group2"][value="one"]') 
1
$('input:[value="one"], input:[name="group2"]').length === 5 

你必須使用一個,逗號分隔。順便說一句,編寫一個像[anything=foobar]這樣的選擇器是不好的做法。這是通用選擇器(*)的隱含用法,它將查詢標記中的所有元素。

這將查詢兩個選擇器並將結果一起添加到包裝集中。如果您想查詢其中擁有兩個屬性節點,電線東西,如:

$('input:[value="one"][name="group2"]').length === 1 
+1

這不是OP想要的 – 2011-01-28 14:44:38

+0

這會找到每個輸入都帶有`value =「one」`或`name =「group2」`或都。 – BoltClock 2011-01-28 14:45:06

+0

@Downvoter:哇,無論你是誰,但你真的煩我:p時間管理員電話我猜 – jAndy 2011-01-28 14:58:49

1

你想這個,而不是從group2尋找價值one

$('input[name="group2"][value="one"]').length 

這就是所謂的multiple-attribute-selector(docs)

請注意,我還添加了一個input標籤選擇器。這是因爲頁面上的每個元素都不需要進行分析。

2

我想你想要的是:

$('[name="group2"][value="one"]') 

這裏選擇有name屬性與價值group2value屬性與價值one元素。

$(selector, element)是不同的。它會找到與selector匹配的所有element的後代。請參閱documentation

0

嘗試的$長度(」 [value =「one」],[name =「group2」]')