我正在尝试使用jQuery检查是否存在包含特定文本字符串的<option>
。到目前为止,我的尝试并没有像我预期的那样奏效这是HTML:
<select>
<option value="13">General</option>
<option value="3">Innovation</option>
<option value="8">Marketing</option>
<option value="9">Operations</option>
<option value="11">Research</option>
</select>
这是脚本:
var topicSelect = $("select");
var haveTopic = topicSelect.val("Not Here");
alert(haveTopic);
我期待警报显示“未定义”,但它似乎正在回馈select
对象。有没有办法可以检查是否存在选项而不会遍历每个选项?
澄清:
答案 0 :(得分:1)
测试值:
var haveTopic = $("select option[value='not here']").length != 0
修改强>
测试文字:
var haveTopic = $.inArray('Not Here',$("select").text().replace(/ /g,'').split("\n")) != -1
答案 1 :(得分:1)
我相信这应该找到你想要的东西:
if ($("option:contains('not here')").length > 1) { }
原始代码不起作用的原因是因为你设置了选择器的value属性,并且它返回了select,因为jQuery方法将(几乎)总是返回节点集(在你的情况下由“$( 'select')“)这样该方法可以集成到一个链中。
答案 2 :(得分:0)
我没有看过如何实现.filter(fn),但你可以将它作为解决方案。
$.fn.hasOptionWithText = function(text) {
var options = $("option", $(this)).filter(function(){
return $(this).text() === text;
});
return options.length > 0;
};
$(document).ready(function() {
var hasNotHere = $("select").hasOptionWithText('Not Here');
var hasGeneral = $("select").hasOptionWithText('General');
alert(hasNotHere + ' ' + hasGeneral);
});