有很多方法可以做到这一点,但在val()的顶级答案和大量参数中,最干净的方法已经丢失了。从jQuery1.6开始,一些方法也发生了变化,因此需要更新。
对于以下示例,我将假设变量$select是指向所需<select>标记的jQuery对象,例如通过以下方式:
var $select = $('.selDiv .opts');
注意1-使用val()进行值匹配:
对于值匹配,使用val()比使用属性选择器简单得多:https://jsfiddle.net/yz7tu49b/6/
$select.val("SEL2");
val()的setter版本是通过将匹配选项的selected属性设置为相同值来在select标记上实现的,因此在所有现代浏览器上都能正常工作。
注2-使用prop(“selected”,true):
如果要直接设置选项的选定状态,可以使用prop(而不是attr)和布尔参数(而不是选定的文本值):
例如https://jsfiddle.net/yz7tu49b/
$option.prop('selected', true); // Will add selected="selected" to the tag
注3-允许未知值:
如果使用val()选择<option>,但val不匹配(可能会发生,具体取决于值的来源),则选择“nothing”,$select.val()将返回null。
因此,对于所示的示例,为了健壮性,您可以使用以下内容https://jsfiddle.net/1250Ldqn/:
var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
$select.val("DEFAULT");
}
注4-精确文本匹配:
如果您想通过精确的文本进行匹配,可以使用带有函数的筛选器。例如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-按索引匹配
如果您想通过索引进行匹配,只需对select的子项进行索引即可。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()启动新选择
在上述所有情况下,更改事件都不会触发。这是为了避免递归更改事件。
要生成更改事件,如果需要,只需向jQueryselect对象添加对.change()的调用。例如,第一个最简单的例子变成https://jsfiddle.net/yz7tu49b/7/
var $select = $('.selDiv .opts');
$select.val("SEL2").change();
还有很多其他方法可以使用属性选择器来查找元素,如[value=“SEL2”],但您必须记住,与所有其他选项相比,属性选择器相对较慢。