2010-02-12 37 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 
 
}

相关问题