如何在jQuery中的SELECT元素中选择特定选项?

Jay*_*ett 686 jquery

如果您知道索引,值或文本.如果您没有直接参考的ID,也可以.

这个,这个都是有用的答案.

示例标记

<div class="selDiv">
  <select class="opts">
    <option selected value="DEFAULT">Default</option>
    <option value="SEL1">Selection 1</option>
    <option value="SEL2">Selection 2</option>
  </select>
</div>
Run Code Online (Sandbox Code Playgroud)

Gra*_*eit 1161

按值获取中间option-element的选择器是

$('.selDiv option[value="SEL1"]')
Run Code Online (Sandbox Code Playgroud)

对于索引:

$('.selDiv option:eq(1)')
Run Code Online (Sandbox Code Playgroud)

对于已知文本:

$('.selDiv option:contains("Selection 1")')
Run Code Online (Sandbox Code Playgroud)

编辑:如上所述,OP可能是在更改下拉列表的选定项目之后.在1.6及更高版本中,建议使用prop()方法:

$('.selDiv option:eq(1)').prop('selected', true)
Run Code Online (Sandbox Code Playgroud)

在旧版本中:

$('.selDiv option:eq(1)').attr('selected', 'selected')
Run Code Online (Sandbox Code Playgroud)

EDIT2:在Ryan的评论之后."选择10"上的匹配可能是不需要的.我找不到匹配全文的选择器,但过滤器有效:

 $('.selDiv option')
    .filter(function(i, e) { return $(e).text() == "Selection 1"})
Run Code Online (Sandbox Code Playgroud)

编辑3:请谨慎使用,$(e).text()因为它可能包含换行符,使比较失败.当隐式关闭选项(无</option>标记)时会发生这种情况:

<select ...>
<option value="1">Selection 1
<option value="2">Selection 2
   :
</select>
Run Code Online (Sandbox Code Playgroud)

如果您只是使用e.text任何额外的空格,就会删除尾随换行符,从而使比较更加健壮.

  • 这也是有效的**$('#id option [value ="0"]').attr('selected','selected');** (25认同)
  • :包含不是很好,因为它将匹配文本片段; 如果您的任何选项文本是另一个选项文本的子字符串,则会出现问题. (7认同)
  • 我想补充一下你应该肯定使用道具而不是attr.我几乎疯了,试图调试应用程序并从attr更改为prop修复它. (5认同)

小智 118

上面没有一种方法提供了我需要的解决方案,所以我想我会提供适合我的方法.

$('#element option[value="no"]').attr("selected", "selected");
Run Code Online (Sandbox Code Playgroud)

  • 请注意,从jQuery 1.6开始,这应该使用`prop`而不是`attr`. (8认同)
  • @CarlosLlongo:没关系。jQuery的建议是始终优先使用`prop`而不是`attr`。这样可以省去在w3.org上查找每个属性的麻烦,以查看它是否只是一个属性,或者是通过支持操作实现的。 (3认同)

Lea*_*one 77

你可以使用val()方法:

$('select').val('the_value');
Run Code Online (Sandbox Code Playgroud)

  • +1:不,它不是JQuery选择器,但我认为搜索这个问题的大多数人都像我一样,只想改变当前选择的选项; 想出一个真正的选择器只是一种方法.这肯定比我见过的那些让你迭代所有选项的答案更好. (24认同)
  • 这是错误的,因为您将所有SELECT元素的值设置为`the_value`..val不是选择器/过滤器功能!它是一个属性访问器,并传递它的字符串SETS值.我试图把我的upvote回来,但是在测试之后我把它重新调整了. (18认同)
  • 请@AaronLS和@guilhermeGeek,参考[docs](http://api.jquery.com/val/)(最后一个例子).它作为选择,复选框和单选按钮的选择器,并作为文本输入和textareas的值设置器. (10认同)
  • 你误读了文档.对于复选框,无线电和列表框,该命令为这些项设置"selected"属性.最后一个示例显示了传递val("复选框1")如何使其成为选中状态.就通过CSS/jquery选择器获取对象而言,这与"选择器"不同.我测试了你的代码,它不起作用. (8认同)
  • 你有10票作为有用的答案吗?val()是一个getter和一个setter.如果您只使用val(),您将获得该值.如果你传递val('the_value')这样的东西,你就把它设置为'the_value' (4认同)
  • @theUtherSide:我不会总是达成共识.`select`上的`val()`setter是通过设置值匹配的子`选项`的selected属性来实现的,所以确实做了问题所需(*但仅用于值搜索而不是文本搜索)*). (3认同)
  • +1。使用这个答案,因为它为我省去了 `con+ca+to+nation` 的麻烦,并且因为我们的值被链接到一个 JavaScript 对象,使用 `.val(object.property)` 和 `object.property = .val() `要简单得多。到目前为止,我们对此没有任何错误,而且似乎工作正常。使用这种方法序列化也可以正常工作,并且到目前为止`name=value` 已正确序列化。(当然`$('select')` 需要用你自己的选择器替换!) (2认同)
  • <select> value是所选选项 (2认同)

mpo*_*tto 52

根据价值,使用jQuery 1.7对我有用的是下面的代码,试试这个:

$('#id option[value=theOptionValue]').prop('selected', 'selected').change();
Run Code Online (Sandbox Code Playgroud)

  • `.change()`是必要的.我有一个例子,我根据SELECT切换缩略图.当我上传自定义主题时,应该从选项列表中选择"自定义主题".`.prop()`调用有效,但如果没有`.change()`,我选择右侧的缩略图图片永远不会更新. (5认同)
  • 我不确定你需要.change()方法. (4认同)
  • .change()是最好的建议.+1 (2认同)

Gon*_*ing 15

有很多方法可以做到这一点,但最干净的方法已经在最重要的答案和大量的争论中丢失了val().从jQuery 1.6开始,一些方法也发生了变化,因此需要更新.

对于以下示例,我将假设变量$select是指向所需<select>标记的jQuery对象,例如通过以下内容:

var $select = $('.selDiv .opts');
Run Code Online (Sandbox Code Playgroud)

注1 - 使用val()进行值匹配:

对于值匹配,使用val()比使用属性选择器简单得多:https://jsfiddle.net/yz7tu49b/6/

$select.val("SEL2");
Run Code Online (Sandbox Code Playgroud)

setter版本.val()select通过设置selected匹配的属性在标签上实现optionvalue,因此在所有现代浏览器上都可以正常工作.

注2 - 使用prop('selected',true):

如果要直接设置选项的选定状态,可以使用prop(而不是attr)boolean参数(而不是文本值selected):

例如https://jsfiddle.net/yz7tu49b/

$option.prop('selected', true);  // Will add selected="selected" to the tag
Run Code Online (Sandbox Code Playgroud)

注3 - 允许未知值:

如果您使用val()选择a <option>,但val不匹配(可能会发生取决于值的来源),则选择"nothing"并$select.val()返回null.

因此,对于显示的示例,为了健壮,您可以使用类似这样的内容https://jsfiddle.net/1250Ldqn/:

var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
  $select.val("DEFAULT");
}
Run Code Online (Sandbox Code Playgroud)

注4 - 完全文本匹配:

如果要按精确文本进行匹配,可以使用filterwith函数.例如https://jsfiddle.net/yz7tu49b/2/:

var $select = $('.selDiv .opts');
$select.children().filter(function(){
    return this.text == "Selection 2";
}).prop('selected', true);
Run Code Online (Sandbox Code Playgroud)

虽然如果您可能有额外的空格,您可能需要在支票中添加修剪,如下所示

    return $.trim(this.text) == "some value to match";
Run Code Online (Sandbox Code Playgroud)

注5 - 按索引匹配

如果你想通过索引匹配只是索引选择的孩子,例如https://jsfiddle.net/yz7tu49b/3/

var $select = $('.selDiv .opts');
var index = 2;
$select.children()[index].selected = true;
Run Code Online (Sandbox Code Playgroud)

虽然我现在倾向于避免使用直接的DOM属性来支持jQuery,以及面向未来的代码,所以也可以通过https://jsfiddle.net/yz7tu49b/5/来完成:

var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);
Run Code Online (Sandbox Code Playgroud)

注6 - 使用change()来触发新选择

在上述所有情况下,更改事件都不会触发.这是设计使您不会结束递归更改事件.

要生成更改事件,如果需要,只需添加.change()对jQuery select对象的调用.例如,第一个最简单的例子变成https://jsfiddle.net/yz7tu49b/7/

var $select = $('.selDiv .opts');
$select.val("SEL2").change();
Run Code Online (Sandbox Code Playgroud)

还有很多其他方法可以使用属性选择器来查找元素[value="SEL2"],但是您必须记住,与所有其他选项相比,属性选择器相对较慢.


Yoe*_*ran 14

$('#select option[data-id-estado="3"]').prop("selected",true).trigger("change");    
        // or       
$('#select option[value="myValue"]').prop("selected",true).trigger("change");
Run Code Online (Sandbox Code Playgroud)


小智 13

你可以命名选择并使用它:

$("select[name='theNameYouChose']").find("option[value='theValueYouWantSelected']").attr("selected",true);
Run Code Online (Sandbox Code Playgroud)

它应该选择你想要的选项.


小智 12

   $(elem).find('option[value="' + value + '"]').attr("selected", "selected");
Run Code Online (Sandbox Code Playgroud)


Jay*_*ett 9

回答我自己的问题以获取文档.我确信还有其他方法可以实现这一点,但这样可行,并且此代码已经过测试.

<html>
<head>
<script language="Javascript" src="javascript/jquery-1.2.6.min.js"></script>
<script type="text/JavaScript">

$(function() {
    $(".update").bind("click",      // bind the click event to a div
        function() {
            var selectOption = $('.selDiv').children('.opts') ;
            var _this = $(this).next().children(".opts") ;

            $(selectOption).find("option[index='0']").attr("selected","selected");
//          $(selectOption).find("option[value='DEFAULT']").attr("selected","selected");
//          $(selectOption).find("option[text='Default']").attr("selected","selected");


//          $(_this).find("option[value='DEFAULT']").attr("selected","selected");
//          $(_this).find("option[text='Default']").attr("selected","selected");
//          $(_this).find("option[index='0']").attr("selected","selected");

    }); // END Bind
}); // End eventlistener

</script>
</head>
<body>
<div class="update" style="height:50px; color:blue; cursor:pointer;">Update</div>
<div class="selDiv">
        <select class="opts">
            <option selected value="DEFAULT">Default</option>
            <option value="SEL1">Selection 1</option>
            <option value="SEL2">Selection 2</option>
        </select>
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)


rad*_*vus 8

使用jquery-2.1.4,我发现以下答案适合我:

$('#MySelectionBox').val(123).change();
Run Code Online (Sandbox Code Playgroud)

如果您有字符串值,请尝试以下操作:

$('#MySelectionBox').val("extra thing").change();
Run Code Online (Sandbox Code Playgroud)

其他例子对我不起作用,这就是我添加这个答案的原因.

我在以下网址找到了原始答案:https: //forum.jquery.com/topic/how-to-dynamically-select-option-in-dropdown-menu


Nic*_*sai 8

用于设置选择触发的选择值:

$('select.opts').val('SEL1').change();
Run Code Online (Sandbox Code Playgroud)

要从范围设置选项:

$('.selDiv option[value="SEL1"]')
    .attr('selected', 'selected')
    .change();
Run Code Online (Sandbox Code Playgroud)

此代码使用选择器查找具有条件的选择对象,然后通过更改所选属性attr().


此外,我建议change()在设置属性后添加事件selected,这样代码将接近用户更改选择.


per*_*l N 7

确实可以尝试以下方法

对于普通选择选项

<script>    
    $(document).ready(function() {
    $("#id").val('select value here');
       });
        </script>
Run Code Online (Sandbox Code Playgroud)

对于选择2选项,触发选项需要使用

<script>    
        $(document).ready(function() {
        $("#id").val('select value here').trigger('change');
           });
            </script>
Run Code Online (Sandbox Code Playgroud)


Mig*_*uel 6

当我知道列表的索引时,我使用它.

$("#yourlist :nth(1)").prop("selected","selected").change();
Run Code Online (Sandbox Code Playgroud)

这允许列表更改,并触发更改事件.":nth(n)"从索引0开始计数


小智 5

我会选择: -

$("select#my-select option") .each(function() { this.selected = (this.text == myVal); });
Run Code Online (Sandbox Code Playgroud)


Pra*_*ani 5

/* This will reset your select box with "-- Please Select --"   */ 
    <script>
    $(document).ready(function() {
        $("#gate option[value='']").prop('selected', true);
    });
    </script>
Run Code Online (Sandbox Code Playgroud)


per*_*l N 5

尝试这个

您只需使用选择字段ID而不是#id(即#select_name)

代替选项值,请使用选择选项

 <script>
    $(document).ready(function() {
$("#id option[value='option value']").attr('selected',true);
   });
    </script>
Run Code Online (Sandbox Code Playgroud)