2013-08-21 57 views
0

HTML:與HTML標籤工作 「中選擇」

<select id="my_select" name="my_select"> 
<option value="1">one</option> 
<option value="2">two</option> 
<option value="3">three</option> 
</select> 

JS:

$("#my_select :contains('two')").first().attr("selected", "selected"); 

jsfiddle

因此,所選擇的元素應該是two,但正如你看到的,它one。如何解決它?

謝謝。

+2

你爲什麼先打()? – Itay

+1

那個jsFiddle對我來說工作正常 - 加載時選擇了兩個選項。你使用的是什麼瀏覽器? –

+1

FOR ME小提琴工作(最新firefox win7) –

回答

2

使用.prop('selected',true)

$("#my_select :contains('two')").first().prop("selected", true); 

http://jsfiddle.net/6Pxz5/

.prop() docs它指出

的selectedIndex,標記名的nodeName,節點類型,ownerDocument,defaultChecked和defaultSelected應該檢索和設置的使用.prop()方法。在jQuery 1.6之前,這些屬性可以使用.attr()方法檢索,但這不屬於attr範圍。這些沒有相應的屬性,只是屬性。

儘管如此,要記住關於checked屬性最重要的概念是它不對應於checked屬性。該屬性實際上對應於defaultChecked屬性,並且應僅用於設置複選框的初始值。檢查的屬性值不會隨複選框的狀態而變化,而檢查的屬性值會變化。因此,確定複選框是否被選中的跨瀏覽器兼容方式是使用以下屬性:

對於其他動態屬性(例如selected和value)也是如此。

+0

儘管prop()在支持它的版本中是首選,但最終結果將會是'selected =「」'vs'selected =「selected」'。這並不重要的是什麼'selected'值是:http://jsfiddle.net/EQ8t8/這就是說,OP的代碼應該工作,如果這個工作,反之亦然。 – Johan

+1

@Johan attr只設置默認開始 - 不是實際的屬性 –

2

使用.prop(),而不是.attr()

$("#my_select :contains('two')").first().prop("selected", true); 
1

,如果你設置的jsfiddle No wrap - <in body>你的演示作品...:http://jsfiddle.net/IrvinDominin/3M9cC/8/

一個清潔的解決方案是使用prop而不是attr,我認爲first在這種情況下是無用的,所以你可以省略它。

快速參考:

的.prop()方法是設置的 性質,特別是設置多個屬性時的值的便利方式,使用由函數返回的值 ,或者在多個設置值元素在 一次。它應該用於設置selectedIndex,tagName,nodeName, nodeType,ownerDocument,defaultChecked或defaultSelected。由於 jQuery 1.6,這些屬性不能再使用.attr() 方法進行設置。它們沒有相應的屬性,只有 屬性。

屬性通常會影響DOM元素的動態狀態,而無需更改序列化的HTML屬性 。示例包括輸入元素的值 屬性,輸入和 按鈕的禁用屬性或複選框的選中屬性。 .prop()方法 應該用於設置禁用和檢查,而不是.attr() 方法。 .val()方法應用於獲取和設置 值。

代碼:

$("#my_select :contains('two')").prop("selected", true); 

演示:http://jsfiddle.net/IrvinDominin/3M9cC/5/

0
var text1 = 'two'; 
$("select option").filter(function() { 
    //may want to use $.trim in here 
    return $(this).text() == text1; 
}).prop('selected', true); 
0

你可以只設置它的價值,而不是試圖與HTML '選擇' 的標籤混亂:

if ($("#my_select :contains('two')").length > 0) { 
    $("#my_select").val(2); 
} 

A JSFiddle