Javascript 如何使用jQuery通过下拉列表中的文本值选择项目?
如果我有下面的select,并且不知道要用于提前选择一个项目的值(如本文中所述)或我想要选择的项目的索引,那么如果我知道文本值(如选项C),如何使用jQuery选择其中一个选项Javascript 如何使用jQuery通过下拉列表中的文本值选择项目?,javascript,jquery,dom,Javascript,Jquery,Dom,如果我有下面的select,并且不知道要用于提前选择一个项目的值(如本文中所述)或我想要选择的项目的索引,那么如果我知道文本值(如选项C),如何使用jQuery选择其中一个选项 <select id='list'> <option value='45'>Option A</option> <option value='23'>Option B</option> <option value='17'>Option C</
<select id='list'>
<option value='45'>Option A</option>
<option value='23'>Option B</option>
<option value='17'>Option C</option>
</select>
方案A
方案B
备选案文C
这应该可以做到:
// option text to search for
var optText = "Option B";
// find option value that corresponds
var optVal = $("#list option:contains('"+optText+"')").attr('value');
// select the option value
$("#list").val( optVal )
正如Neppless所指出的,当搜索的文本可以在多个选项中找到时,这将表现得不可预测
function SelectItemInDropDownList(itemToFind){
var option;
$('#list option').each(function(){
if($(this).text() == itemToFind) {
option = this;
option.selected = true;
return false;
}
}); }
我只是修改了前面的代码,因为它只在选择列表中找到了选项,有些人可能需要文字演示。问题是,它还会将一个选项与文本“notoption B”或“option B12”匹配(显然超出了示例的范围,但示例显然是人为设计的)。您可以使用选项[text]=如果您希望精确匹配而不是“字符串中的某个地方”,请使用“optText”]而不是“contains”。@Scott自从升级到jQuery 1.6.1(和1.6.2)以来,我花了很长时间才实现这一点。请参见下面Pavel回答中的我的评论。@carvelfenton-由于jQuery 1.6,您需要添加冒号以通过文本进行查找。请参见下面的-heh-i/think/这看起来很熟悉!我整个下午都在与此进行斗争。我有在jQuery 1.6.1之前运行的代码,例如$(this)。find('option[text=“sometext”]).val();where$(this)是一个select元素,但由于某种原因,该代码只是返回未定义。我使用了您的答案@Pavel,这在我看来是很好和简洁的,并使我的代码再次工作。谢谢!我仍然想知道为什么旧代码停止工作…?我肯定这是一个新手问题,但是设置option=This;在上面的代码中做什么@Carvell,
选项
在外部作用域的第1行实例化,但其值是未定义的
。通过在第4行设置选项
,外部作用域中的选项
现在是DOM元素,其文本值是'option C'
。在之后,每个循环在外部作用域中,选项
用来指那个特定的元素。啊,好的。这很有道理。我想它应该在我缺少的每个函数中做些什么。设置外部作用域使用我理解:)谢谢。
$("#list option").each(function() {
this.selected = $(this).text() == "Option C";
});
$("#list option").each(function() {
this.selected = $(this).text() == "Option C";
});