2011-02-15 128 views
7

给定一个SELECT元素:jquery:[]选择器?

<select> 
    <option>foo</option> 
    <option>bar</option> 
    <option>baz</option> 
</select> 

我想选择与价值“栏”选项元素。

这不起作用:

$('option[text="bar"]').attr('selected', true); 

然而,这并不工作:

$('option:[text="bar"]').attr('selected', true); 

为什么?

现场演示:http://jsfiddle.net/YbfqZ/2/

+0

请记住,jQuery在前几个版本中已更改。所以你不要引用属性input [name = dog_type]:radio。它过去看起来像这个输入[@ name =“dog_type”]。还有很多旧的教程仍然有引号和@符号不再有效。 – Tobias 2011-02-15 21:24:54

+7

@Gaspy不,这是相反的。之前,报价是可选的,现在它们是强制性的。它在文档中说:http://api.jquery.com/attribute-equals-selector/ – 2011-02-15 21:37:04

+0

嗯,我真的把我的脚放在我的嘴里。我昨天遇到了一些问题,当时我拿了一些旧的jQuery代码,尽管我通过删除引号来修复它。 – Tobias 2011-02-16 06:23:29

回答

8

其原因行为是因为它不是你的结肠打破了querySelectorAll选择有效。

因此,它默认为Sizzle,它将容忍冒号,尽管它在技术上不被支持(这意味着它可能会在未来破裂)。 Sizzle会检查属性和属性。因此,它不会找到text属性,但它会找到<option>元素的text属性。

Here's an example表明Sizzle将匹配一个属性,而不仅仅是一个属性与其attribute-equals选择器。从例如


代码:

// set a custom property on the last option 
$('#id option').slice(-1)[0].customProp = 'customValue'; 

    // breaking the selector with : we default to Sizzle, 
    // which matches our custom property 
$('#id option:[customProp="customValue"]').attr('selected', true); 

编辑:我的例子链接前面引用别人的例子,因为我打字错误的版本号。固定。

2

做到这一点,正确的方法是给选择一个ID,并给OPTION项值。然后你可以设置选择的值。

<select id="theSelect"> 
    <option value="foo">foo</option> 
    <option value="bar">bar</option> 
    <option value="baz">baz</option> 
</select> 

而且JS是这样的

$('#theSelect').val('foo'); 

现场演示 http://jsfiddle.net/YbfqZ/4/