检查是否存在具有特定文本的选项

时间:2009-11-06 15:07:30

标签: jquery html-select

我正在尝试使用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对象。有没有办法可以检查是否存在选项而不会遍历每个选项?

澄清:

  • 文字字符串需要匹配,而不是值
  • 寻找完全匹配大小写的匹配
  • 可以返回true / false或undefined

3 个答案:

答案 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);
});