从下拉列表中选择选项

时间:2013-05-11 06:10:44

标签: jquery drop-down-menu jquery-selectors

我有一个动态下拉列表,其值属性设置为“4107,2632”。当我应用过滤器时,我只有一个值为4107,可在value属性的下拉选项中找到。下拉列表的渲染html是

<select id="ddlFilterGoal">
    <option value="All">Goals / Folders</option>
    <option value="4124,2632">1234567890 (APPp PUB)</option>
    <option value="4123,2645">aaaa sdsssss (NNN Employee)</option>
    <option value="4088,2629">Default (nb nb)</option>
    <option value="4107,2632">Goal with start date only (APPp PUB)</option>
</select>

现在我正在尝试选择像这样的选项

$("#ddlFilterGoal option:value:contains('4107')").val(); - no error but option not get selected, it gives the default option "All" 
$("#ddlFilterGoal option:[value:contains('4107')"]).val(); - error with "]"

请告诉我我做错了什么以及如何实现这一目标。

2 个答案:

答案 0 :(得分:4)

$("#ddlFilterGoal option[value*='4107']").val();

有关详细信息,请参阅:http://api.jquery.com/attribute-contains-selector/

注意:这个答案提供了对您尝试做的解决方案的深入了解:包含。我没有假设您的数据是什么样的,所以这个答案并不建议使用它来查找选择列表中的选项值,而是提供了如何使用属性包含选择器的深入了解

答案 1 :(得分:1)

最安全的方法。

您可能有另一个选项,其值包含字符串4107 ex: - 41072等。因此,最好的方法是过滤掉您要查找的确切值。

Demo

alert($("#ddlFilterGoal option").filter(function(){
     return $.inArray('4107' ,this.value.split(',')) > -1;
}).first().val());

alert($("#ddlFilterGoal option").filter(function(){
     return $.inArray('4107' ,this.value.split(',')) > -1;
}).get(0).value);

包含选择器也会匹配以下选择器,因为它在值中包含4107,但您要查找的实际值是4107.

  <option value="41077,2632">Goal with start date only (APPp PUB)</option>

更准确地说: -

var match=$("#ddlFilterGoal option").filter(function(){
     return $.inArray('4107' ,this.value.split(',')) > -1;
}).get(0); //<-- Remove get(0) to get array of values incase of multiple matches.

if(match)
    alert(match.value); 
else
    alert('No match');