2011-01-28 74 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”]')