2011-02-15 204 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/