3

我有一个包含以下选项的选择:

<select>
     <option value="1">A</option>
     <option value="2">B</option>
     <option value="3">C</option>
</select>

我不知道值是什么,但在我的 JQuery 代码中,我想选择选项二,因为我知道文本是 B(但没有别的)。

如何做呢?

4

5 回答 5

4

您可以使用:contains()选择器:

$('option:contains("B")').prop('selected', true);

或者:

$('option')
    .filter(function() {
        return this.text == 'B'; 
    })
    .prop('selected', true);
于 2012-05-23T07:41:35.567 回答
3

如果您不确定值是什么,但知道里面的文本是什么,您可以使用:contains()选择器获取相应的选项,获取其值,然后设置选择。

请注意,:contains()执行子字符串匹配,因此:contains(foo)将同时选择<p>foo</p><p>barfoobar</p>(正如ThiefMaster在评论中指出的那样)。

要对选择进行更精细的控制,您需要.filter()我在下面提到的选项。

// relevant option
//     : not entirely sure if .val() will get an option's value
var _optionval = $('option:contains("B")').attr('value');

// set select value
$('select').val(_optionval);

编辑

我根据您对杰克回答的评论分享以下内容。

:contains()基本上旨在对元素的内容进行匹配。没有绕过那个。

但是,您可以使用类似的东西.filter()来编写更复杂的代码。

$('option').filter(function () {

    // we want the option (or optionS) with text that starts with "foo"
    return $(this).text().indexOf('foo') === 0;

    // or maybe just something with an exact match
    //
    // return $(this).text() === 'foo';
});
于 2012-05-23T07:42:25.630 回答
2
<select id="select_id">
 <option value="1">A</option>
 <option value="2">B</option>
 <option value="3">C</option>
</select>

$("#select_id option").each(function (){
   if($(this).text()=='B'){
       // DO what you want to  
   }
});

此代码将在带有文本“B”的选择字段中选择您的任何选项。我想这就是你想要的

于 2012-05-23T07:45:19.483 回答
1

试试这个(确保你给你的选择一个 ID,我用过mySelect):

$("#mySelect").val($("#mySelect:option:contains('B')").val());
于 2012-05-23T07:39:37.530 回答
1
$('option').each(function(){
    var t=this
    if(t.text=='B'){
       t.selected='selected';
    }
});​
于 2012-05-23T07:53:12.123 回答