0

我有一个动态下拉列表,其值属性设置为“4107,2632”。当我应用过滤器时,我只有一个值 4107,它在值属性的下拉选项中可用。下拉列表的呈现 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 "]"

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

4

2 回答 2

4

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

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

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

于 2013-05-11T06:15:11.990 回答
1

最安全的方法来做到这一点。

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

演示

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');
于 2013-05-11T06:21:28.657 回答