如果您知道索引,值或文本。另外,如果您没有直接参考的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>
如果您知道索引,值或文本。另外,如果您没有直接参考的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>
Answers:
通过值获取中间选项元素的选择器是
$('.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"})
EDIT3:请谨慎使用,$(e).text()
因为它可能包含换行符,导致比较失败。当选项被隐式关闭(没有</option>
标签)时,会发生这种情况:
<select ...>
<option value="1">Selection 1
<option value="2">Selection 2
:
</select>
如果您仅使用e.text
任何多余的空格,例如尾随的换行符将被删除,则使比较更加可靠。
上面的方法都没有提供我需要的解决方案,所以我认为我会提供对我有用的方法。
$('#element option[value="no"]').attr("selected", "selected");
prop
而不应该使用attr
。
.attr
是正确的。“ selected”是<option> w3.org/TR/html5/forms.html#attr-option-selected
prop
优先使用attr
。这省去了在w3.org上查找每个属性的麻烦,以查看它是否只是一个属性,或者是通过后备操作实现的。
您可以只使用val()
方法:
$('select').val('the_value');
the_value
。.val不是选择器/过滤器功能!这是一个属性访问器,将字符串设置值传递给它。我试图收回我的支持,但是在测试中意识到这一点已经为时已晚。
按值计算,jQuery 1.7对我有用的是以下代码,请尝试以下操作:
$('#id option[value=theOptionValue]').prop('selected', 'selected').change();
.change()
必要。我有一个示例,其中我基于SELECT切换了缩略图。当我上传自定义主题时,应该从选项列表中选择“自定义主题”。该.prop()
电话的工作,但没有.change()
,我选择右侧的缩略图永远不会更新。
prop
值会生成相同的输出。例如.prop('selected', true)
有许多方法可以做到这一点,但是最干净的方法已经失去了最重要的答案和之上的论点val()
。从jQuery 1.6开始,一些方法也发生了变化,因此需要更新。
对于以下示例,我将假定变量$select
是指向所需<select>
标签的jQuery对象,例如通过以下方式:
var $select = $('.selDiv .opts');
对于值匹配,使用val()
比使用属性选择器简单得多:https : //jsfiddle.net/yz7tu49b/6/
$select.val("SEL2");
的setter版本.val()
是select
通过在标签上设置selected
match 的属性来实现option
的value
,因此在所有现代浏览器上都可以正常工作。
如果您想直接设置选项的选定状态,则可以将prop
(not attr
)与boolean
参数(而不是text值selected
)一起使用:
例如https://jsfiddle.net/yz7tu49b/
$option.prop('selected', true); // Will add selected="selected" to the tag
如果使用val()
来选择<option>
,但val不匹配(可能会根据值的来源而发生),则“无”将被选择并$select.val()
返回null
。
因此,对于所示的示例,为了稳健起见,您可以使用类似https://jsfiddle.net/1250Ldqn/的内容:
var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
$select.val("DEFAULT");
}
如果要按精确文本进行匹配,则可以使用filter
with函数。例如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";
如果要按索引匹配,只需对选择的子项进行索引,例如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);
在上述所有情况下,change事件不会触发。这是设计使然,因此您不会遇到递归更改事件。
要生成更改事件,如果需要,只需将调用添加.change()
到jQuery select
对象。例如,第一个最简单的示例变为https://jsfiddle.net/yz7tu49b/7/
var $select = $('.selDiv .opts');
$select.val("SEL2").change();
还有许多其他使用属性选择器来查找元素的方法,例如[value="SEL2"]
,但是您必须记住,与所有其他选项相比,属性选择器相对较慢。
$(elem).find('option[value="' + value + '"]').attr("selected", "selected");
回答我自己的文档问题。我敢肯定还有其他方法可以做到这一点,但这可以正常工作,并且此代码已经过测试。
<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>
使用jquery-2.1.4,我发现以下答案对我有用:
$('#MySelectionBox').val(123).change();
如果您有字符串值,请尝试以下操作:
$('#MySelectionBox').val("extra thing").change();
其他示例对我不起作用,因此这就是我添加此答案的原因。
我在以下位置找到了原始答案:https : //forum.jquery.com/topic/how-to-dynamic-select-option-in-dropdown-menu
对于选择的Jquery,如果您将属性发送给function并且需要update-select选项
$('#yourElement option[value="'+yourValue+'"]').attr('selected', 'selected');
$('#editLocationCity').chosen().change();
$('#editLocationCity').trigger('liszt:updated');
/* This will reset your select box with "-- Please Select --" */
<script>
$(document).ready(function() {
$("#gate option[value='']").prop('selected', true);
});
</script>
该$('select').val('the_value');
看起来正确的解决方案,如果您有数据表中的行,那么:
$row.find('#component').val('All');
$("#my_select").val("the_new_value").change();
......从这样