2

html代码是这样的:

<select id="select1">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select> 

我想知道如何编写一个函数来测试 astring是否在option一个选择中,例如

test_in("volvo", "select1")      // Return True
test_in("asdf", "select1")      // Return False
test_in("AUDI", "select1")      // Return False

有人对此有想法吗?谢谢!

4

7 回答 7

3

我会这样做:

function test_in(value, selector) {
    return $(selector + " option[value=" + value + "]").length > 0;
}

小提琴

如果您希望它不那么严格,您可能需要转换大小写。此外,我不确定您要如何处理option元素具有不同值属性和文本内容的情况。哪一个是测试的决定性因素?我写的版本检查 value 属性。

注意:正如评论中所指出的,我编写的函数需要一个完整的选择器,因此您必须包含#id 和.类(例如#select1,在您的情况下)。我认为这是最好的方法,因为您不必为要检查的任何选择仅使用 id。

于 2012-11-23T13:19:44.103 回答
2

如果你想要一个实际的 jQuery 函数,这里有一些你可以使用的东西。它接受正则表达式以及要在每个选项的值中搜索的字符串;只有 jQuery 集合的第一个元素用于搜索。

(function($) {
    $.fn.hasOption = function(re) {
        var options = this[0] && this[0].options || [],
        matches = re.test || function(val) {
            return val.indexOf(re) != -1;
        }

        for (var i = 0, item; item = options[i]; ++i) {
            if (matches.call(re, item.value)) {
                return true;
            }
        }

        return false;
    }
}(jQuery));

调用它:

$('#select1').hasOption('volvo')); // true
$('#select1').hasOption('asdf')); // false
$('#select1').hasOption('AUDI')); // false
$('#select1').hasOption(/AUDI/i)); // true!
于 2012-11-23T14:50:36.133 回答
1

原版 JS 解决方案:http: //jsfiddle.net/rfQga/2/

var test_in = function(val, target) {
    var select = document.getElementById(target),
    retVal = false,
    rgCheck = new RegExp(val, "g");

    var i = 0,
    opts = select.options,
    l = opts.length;

    for (;i<l;i++) {
        if (rgCheck.test(opts[i].value)) {
            retVal = true;
            break;
        }
    }

    return retVal;
}
于 2012-11-23T13:25:17.837 回答
1

$("#select1 option[value='volvo']").length- 如果它等于零,则选择中没有它。

于 2012-11-23T13:21:00.640 回答
1

尝试在选择控件indexOfoptions数组上使用

不,options它是一个 nodeList,所以试试:

尝试

var opts = [].slice.call(document.querySelector('#select1').options);
if (opts.filter(function(opt){return /mercedes/i.test(opt.value);}).length){
  /* ... */
}
于 2012-11-23T13:18:36.003 回答
0

尝试使用这样的东西:

function test_in(value, selectId){
    var foundValue = null;
    $("#" + selectId + " > option").each(function() {
        if (this.text == value){
            foundValue = value;
            return false; // break the each iteration
        }
    });
    return (foundValue != null);
}
于 2012-11-23T13:22:46.223 回答
-1

尝试这个:

$("#select1 > option").each(function() {
if($(this).val()=='volvo'){
alert("value is in the combobox");
}
});​

工作演示在这里

于 2012-11-23T13:20:12.463 回答