jQuery选择器问题

时间:2011-01-28 14:39:44

标签: javascript jquery jquery-selectors

<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>

以下陈述为true

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

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

那怎么来......

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

我原本认为,对于name==group2value=="one"的元素,我应该在1的所有元素中有效地查看。为什么不是这样?

5 个答案:

答案 0 :(得分:4)

此选择器,使用范围/上下文的第二个参数:

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

尝试使用[value="one"]找到<{1}} 元素下降的元素[name="group2"]。这意味着你最终会在DOM中查看至少两个不同元素的级别。

在你的情况下,你的单选按钮有两个属性,所以你想要连接两个属性选择器(我添加input只是为了节省jQuery的一些工作):

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

答案 1 :(得分:2)

我认为你想要的是:

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

这会选择name属性的元素,其值group2 value属性值为one

$(selector, element)有所不同。它会找到与element匹配的selector的所有后代。请参阅documentation

答案 2 :(得分:1)

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

您必须使用一个字符串,逗号分隔。顺便说一句,编写像[anything=foobar]这样的选择器是不好的做法。这是对通用选择器(*)的隐式用法,它会查询标记中的所有元素。

这将查询两个选择器并将结果一起添加到包装集中。如果您想查询拥有这两个属性的节点,请将其连接起来:

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

答案 3 :(得分:1)

您希望从one找到值group2

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

这称为multiple-attribute-selector(docs)

请注意,我还添加了input标记选择器。这是页面上的每个元素都不需要分析。

答案 4 :(得分:0)

尝试$('[value =“one”],[name =“group2”]')的长度