当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在jQuery中的SELECT元素中选择特定选项?》经验,为你挑选了14个好方法。

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

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

示例标记

Grastveit.. 1161

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

$('.selDiv option[value="SEL1"]')

对于索引:

$('.selDiv option:eq(1)')

对于已知文本:

$('.selDiv option:contains("Selection 1")')

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

$('.selDiv option:eq(1)').prop('selected', true)

在旧版本中:

$('.selDiv option:eq(1)').attr('selected', 'selected')

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

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

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


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



1> Grastveit..:

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

$('.selDiv option[value="SEL1"]')

对于索引:

$('.selDiv option:eq(1)')

对于已知文本:

$('.selDiv option:contains("Selection 1")')

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

$('.selDiv option:eq(1)').prop('selected', true)

在旧版本中:

$('.selDiv option:eq(1)').attr('selected', 'selected')

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

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

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


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


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

2> 小智..:

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

$('#element option[value="no"]').attr("selected", "selected");


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

3> Leandro Ardi..:

你可以使用val()方法:

$('select').val('the_value');


+1:不,它不是JQuery选择器,但我认为搜索这个问题的大多数人都像我一样,只想改变当前选择的选项; 想出一个真正的选择器只是一种方法.这肯定比我见过的那些让你迭代所有选项的答案更好.
这是错误的,因为您将所有SELECT元素的值设置为`the_value`..val不是选择器/过滤器功能!它是一个属性访问器,并传递它的字符串SETS值.我试图把我的upvote回来,但是在测试之后我把它重新调整了.
请@AaronLS和@guilhermeGeek,参考[docs](http://api.jquery.com/val/)(最后一个例子).它作为选择,复选框和单选按钮的选择器,并作为文本输入和textareas的值设置器.
你误读了文档.对于复选框,无线电和列表框,该命令为这些项设置"selected"属性.最后一个示例显示了传递val("复选框1")如何使其成为选中状态.就通过CSS/jquery选择器获取对象而言,这与"选择器"不同.我测试了你的代码,它不起作用.
你有10票作为有用的答案吗?val()是一个getter和一个setter.如果您只使用val(),您将获得该值.如果你传递val('the_value')这样的东西,你就把它设置为'the_value'
@theUtherSide:我不会总是达成共识.`select`上的`val()`setter是通过设置值匹配的子`选项`的selected属性来实现的,所以确实做了问题所需(*但仅用于值搜索而不是文本搜索)*).
标记的jQuery对象,例如通过以下内容:

var $select = $('.selDiv .opts');

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

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

$select.val("SEL2");

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

注3 - 允许未知值:

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

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

var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
  $select.val("DEFAULT");
}

注4 - 完全文本匹配:

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

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

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

    return $.trim(this.text) == "some value to match";

注5 - 按索引匹配

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

var $select = $('.selDiv .opts');
var index = 2;
$select.children()[index].selected = true;

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

var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);

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

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

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

var $select = $('.selDiv .opts');
$select.val("SEL2").change();

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



6> 小智..:

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

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

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



7> 小智..:
   $(elem).find('option[value="' + value + '"]').attr("selected", "selected");



8> Jay Corbett..:

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







Update



9> raddevus..:

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

$('#MySelectionBox').val(123).change();

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

$('#MySelectionBox').val("extra thing").change();

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

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



10> Nick Tsai..:

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

$('select.opts').val('SEL1').change();

要从范围设置选项:

$('.selDiv option[value="SEL1"]')
    .attr('selected', 'selected')
    .change();

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


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



11> perumal N..:
确实可以尝试以下方法

对于普通选择选项


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




12> Miguel..:

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

$("#yourlist :nth(1)").prop("selected","selected").change();

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



13> 小智..:

我会选择: -

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



14> perumal N..:
尝试这个

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

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

 

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有