有很多方法可以做到这一点,但最干净的方法已经在val() 的热门答案和大量争论中丢失了。自 jQuery 1.6 起,一些方法也发生了变化,因此需要更新。
对于以下示例,我将假设变量 $select 是一个指向所需 <select> 标记的 jQuery 对象,例如通过以下方式:
var $select = $('.selDiv .opts');
注 1 - 使用 val() 进行值匹配:
对于值匹配,使用val() 比使用属性选择器简单得多:https://jsfiddle.net/yz7tu49b/6/
$select.val("SEL2");
.val() 的 setter 版本是在 select 标记上实现的,方法是将匹配的 option 的 selected 属性设置为相同的 value,因此适用于所有现代浏览器。
注 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() 选择<option>,但val 不匹配(可能会发生取决于值的来源),则选择“无”并且$select.val() 将返回null。
因此,对于所示示例,并且为了稳健起见,您可以使用类似 https://jsfiddle.net/1250Ldqn/ 的内容:
var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
$select.val("DEFAULT");
}
注 4 - 精确文本匹配:
如果您想通过精确文本进行匹配,您可以使用 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";
注 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"],但您必须记住,与所有其他选项相比,属性选择器相对较慢。