2010-02-12 36 views

回答

158

使用Attribute Equals Selector

var thevalue = 'foo'; 
var exists = 0 != $('#select-box option[value='+thevalue+']').length; 

如果該選項的值通過JavaScript設置,這是行不通的。在這種情況下,我們可以做到以下幾點:

var exists = false; 
$('#select-box option').each(function(){ 
    if (this.value == 'bar') { 
     exists = true; 
     return false; 
    } 
}); 
+8

顯式第二種方法是更安全也因爲它允許包含任何字符,包括']'和''\\選項值。避免從原始文本中構建選擇器字符串而不做適當的CSS轉義。 – bobince

+8

爲什麼'返回false'? –

+13

返回false用於中斷/結束.each循環。 – Angel

14

萬一你(或其他人)可能有意這樣做沒有jQuery的:

var exists = false; 
for(var i = 0, opts = document.getElementById('select-box').options; i < opts.length; ++i) 
    if(opts[i].value === 'bar') 
    { 
     exists = true; 
     break; 
    } 
8

這裏是另外一個類似的選項。在我的情況下,我在構建選擇列表時檢查另一個框中的值。我一直運行到時候我會比較未定義的值,所以我把我的支票是這樣的:

if ($("#select-box option[value='" + thevalue + "']").val() === undefined) { //do stuff } 

我不知道,如果這種做法是比較昂貴。

4

爲什麼不使用過濾器?

var thevalue = 'foo';  
var exists = $('#select-box option').filter(function(){ return $(this).val() == thevalue; }).length; 

比較鬆散的工作,因爲存在> 0是真實的,存在== 0是假的,所以你可以只使用

if(exists){ 
    // it is in the dropdown 
} 

或者結合起來:

if($('#select-box option').filter(function(){ return $(this).val() == thevalue; }).length){ 
    // found 
} 

或者每個選擇下拉菜單中有選擇框類,這會給你一個包含該值的select(s)的jquery對象:

var matched = $('.select-boxes option').filter(function(){ return $(this).val() == thevalue; }).parent(); 
+0

這是我最直觀的方式。 – Simon

1

if(!$('#select-box').find("option:contains('" + thevalue + "')").length){ 
 
//do stuff 
 
}

相關問題