我有一个动态下拉列表,其值属性设置为“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 "]"
请告诉我我做错了什么以及如何实现这一目标。
答案 0 :(得分:4)
$("#ddlFilterGoal option[value*='4107']").val();
有关详细信息,请参阅:http://api.jquery.com/attribute-contains-selector/
注意:这个答案提供了对您尝试做的解决方案的深入了解:包含。我没有假设您的数据是什么样的,所以这个答案并不建议使用它来查找选择列表中的选项值,而是提供了如何使用属性包含选择器的深入了解
答案 1 :(得分: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');