2010-02-12 1 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

Почему 'return 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 dropdown имеет класс select-boxes, это даст вам объект jquery выбора (ов), который содержит значение:

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

Это imho самый интуитивный способ. – Simon

1

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