我需要检查<select>是否有一个文本等于特定值的选项。

例如,如果有一个<option value="123">abc</option>,我将寻找"abc"。

有选择器来做这个吗?

我在寻找类似于$('#选择选项[值="123"]');除了文本。


当前回答

之前的建议在jQuery 1.7.2中都不适用,因为我试图根据文本框中的值设置列表的选定索引,而一些文本值包含在多个选项中。我最终使用了以下方法:

$('#mySelect option:contains(' + value + ')').each(function(){
    if ($(this).text() == value) {
        $(this).attr('selected', 'selected');
        return false;
    }
    return true;
});

其他回答

我尝试了其中的一些功能,直到我找到了一个可以同时在Firefox和IE中运行的功能。这是我想到的。

$("#my-Select").val($("#my-Select" + " option").filter(function() { return this.text == myText }).val());

另一种更容易读懂的写法:

var valofText = $("#my-Select" + " option").filter(function() {
    return this.text == myText
}).val();
$(ElementID).val(valofText);

伪代码:

$("#my-Select").val( getValOfText( myText ) );

之前的建议在jQuery 1.7.2中都不适用,因为我试图根据文本框中的值设置列表的选定索引,而一些文本值包含在多个选项中。我最终使用了以下方法:

$('#mySelect option:contains(' + value + ')').each(function(){
    if ($(this).text() == value) {
        $(this).attr('selected', 'selected');
        return false;
    }
    return true;
});

使用prop而不是attr

$('#mySelect option:contains(' + value + ')').each(function(){
    if ($(this).text() == value) {
        $(this).prop('selected', 'selected');
        return false;
    }
    return true;
});

这也是可行的。

$(" #测试”)。找到(“选择选项:包含(B)”).filter(":选择");

那是10年前的事了。 现在jquery是EOL,我们可以使用普通的DOM来完成这个简单的工作

document.getElementById("SomeSelectId").querySelectorAll("option").forEach(o => o.selected = o.innerText == text);