Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用jQuery通过下拉列表中的文本值选择项目?_Javascript_Jquery_Dom - Fatal编程技术网

Javascript 如何使用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,并且不知道要用于提前选择一个项目的值(如本文中所述)或我想要选择的项目的索引,那么如果我知道文本值(如选项C),如何使用jQuery选择其中一个选项

<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";
});