2010-10-20 78 views
2

我有一個選擇列表,像這樣:設置項都被選中

<select id="drpColours"> 
<option value="" selected="selected">Choose color</option> 
<option value="1">black</option> 
<option value="2">BLUE</option> 
</select> 

我我可以設置基於文本的項目,而不是價值選擇的項目。所以如果我把「藍色」傳遞給一個函數,我想要這個函數設置列表中的第三個項目被選中。

我正在使用jquery。

+0

它不是一個jQuery有關的問題,你要生成HTML你想要的方式,並指定你想要的任何值... – Otar 2010-10-20 15:35:57

+0

你可能環通過下拉列表中的值,將它們轉換爲全部小寫,並檢查哪些具有相同的值。儘管如此,這些選項應該具有有意義的值,例如黑色,藍色等。另外,不應該有一些選項全部小寫,其他選項全部大寫。不好看。 – 2010-10-20 15:53:44

回答

4

試試這個:

function setColor(color) { 
    $('#drpColours option').each(function() { 
     this.selected = (this.text.toLowerCase() === color.toLowerCase()); 
    }); 
} 
setColor('BLUE'); 

它確實不區分大小寫的匹配。如果你想區分大小寫,那麼同時刪除.toLowerCase()調用。

或者這裏有同樣的事情的另一個版本:

function setColor(color) { 
    $('#drpColours option').attr('selected', function() { 
     return (this.text.toLowerCase() === color.toLowerCase()); 
    }); 
} 

setColor('BLUE'); 
+0

只是爲了好玩:這個jsPerf測試(http://jsperf.com/set-selected-option-based-on-contents)顯示第一個版本更快。 – 2010-10-20 16:48:18

+0

@丹 - 感謝您的測試。 :o)這並不令我吃驚。一段時間以來,我一直在研究jQuery在將某個函數傳遞給某些可以接受函數的方法時所做的工作,並且我記得還有一些額外的工作。 – user113716 2010-10-20 17:12:53