jQuery-通过文本说明设置选择控件的选择值


530

我有一个选择控件,并且在javascript变量中有一个文本字符串。

使用jQuery,我想将select控件的selected元素设置为具有文本描述的项目(与值相对,而我没有)。

我知道按值设置它是微不足道的。例如

$("#my-select").val(myVal);

但是我对通过文本描述进行操作感到有些困惑。我想一定有办法从文字描述中获取价值,但是星期五下午我的大脑太忙了,无法计算出来。


1
@DanAtkinson本人也将做同样的事情。select与这个问题绝对无关。
thecoshman 2014年

Answers:


757

按说明选择jQuery v1.6 +

var text1 = 'Two';
$("select option").filter(function() {
  //may want to use $.trim in here
  return $(this).text() == text1;
}).prop('selected', true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<select>
  <option value="0">One</option>
  <option value="1">Two</option>
</select>

低于1.6且大于等于1.4的jQuery版本

var text1 = 'Two';
$("select option").filter(function() {
  //may want to use $.trim in here
  return $(this).text() == text1;
}).attr('selected', true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>

<select>
  <option value="0">One</option>
  <option value="1">Two</option>
</select>

请注意,虽然此方法在高于1.6但低于1.9的版本中可以使用,但从1.6开始不推荐使用。这将无法正常工作在jQuery的1.9+。


之前的版本

val() 应该处理两种情况。

$('select').val('1'); // selects "Two"
$('select').val('Two'); // also selects "Two"
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>

<select>
  <option value="0">One</option>
  <option value="1">Two</option>
</select>


6
感觉好像不应该工作(看起来可能有点模棱两可),但实际上对我来说应该可以工作。谢谢。
DanSingerman

69
请注意,jQuery 1.4现在已更改了此行为,以value在已指定属性的情况下选择by,而在value缺少属性的情况下仅通过文本进行选择。因此,在此示例中,$('select').val('Two')将在1.3.x中选择第二个选项,但在1.4.x中将不执行任何操作。
新月新鲜

18
那么,现在在1.4中做到这一点的最佳方法是什么?
JR Lawhorne 2010年

4
在jQuery的最新版本中,.val('not-an-option-value')会将select重置为第一个选项。
dland

5
第一个回答这个问题似乎是解决方案后的1.3.x stackoverflow.com/questions/3644449/...
DA。

142

我尚未对此进行测试,但这可能对您有用。

$("select#my-select option")
   .each(function() { this.selected = (this.text == myVal); });

90

试试这个...选择带有文本myText的选项

$("#my-Select option[text=" + myText +"]").prop("selected", true);

@spoulson的答案对我有用...我试图在没有.each的情况下做到这一点
Jay Corbett

2
在很多情况下,这种方法并不奏效。我什至不得不$("#my-Select option[text=" + myText +"]").get(0).selected = true;时不时地决定采用经典风格:(...
Shahriyar Imanov

2
请确保在重置之前先删除所选属性,否则该属性似乎将不起作用(在1.9版中对我
有用

3
@MarkW对于1.9,请使用.prop代替.attr; 导致更改的原因是,在1.9版中,jQuery禁用了旧的hack,使您可以使用它们.attr来更改某些DOM属性以及HTML属性。(javascript dom properties vs attributes如果您不知道区别,请使用Google 。)
Mark Amery

更新了答案以.prop('selected', true)代替.attr('selected', 'selected')jQuery 1.9+兼容性使用。
erwaman

43

我以这种方式执行(jQuery 1.9.1)

$("#my-select").val("Dutch").change();

注意:不要忘了change(),因此我不得不搜索很长时间:)


2
希望我可以多次投票。离开时间已经一个小时了,现在我可以回家了。
鲍勃·乔丹

好答案!简单而简短...这应该是最重要的...继续投票。
穆罕默德·塔里克

就我而言,这很有效,谢谢!但是,这不是不是按OP要求的那样根据显示的文本而是按OP所没有的值本身进行选择?
布兰登罗兹

21
$("#myselect option:contains('YourTextHere')").val();

将返回包含文本描述的第一个选项的值。经过测试,可以正常工作。


谢谢-我认为这可能是我使用的版本,因为当没有匹配的文本时,我还需要逻辑,这似乎是最简单的机制。
DanSingerman's

1
请记住,它将仅获取与文本匹配的第一个选项的值。
Russ Cam

此外,您可以将attr(“ selected”,“ selected”)链接到包装的集合上,而不是val()上,这类似于CarolinaJay65的回答
Russ Cam

1
OP说设定值”而不是获得价值”
RousseauAlexandre

15

为了避免所有jQuery版本的复杂性,老实说,我建议使用这些非常简单的javascript函数之一...

function setSelectByValue(eID,val)
{ //Loop through sequentially//
  var ele=document.getElementById(eID);
  for(var ii=0; ii<ele.length; ii++)
    if(ele.options[ii].value==val) { //Found!
      ele.options[ii].selected=true;
      return true;
    }
  return false;
}

function setSelectByText(eID,text)
{ //Loop through sequentially//
  var ele=document.getElementById(eID);
  for(var ii=0; ii<ele.length; ii++)
    if(ele.options[ii].text==text) { //Found!
      ele.options[ii].selected=true;
      return true;
    }
  return false;
}

它允许通过值或文本(取决于所调用的函数)选择选择选项。例如:setSelectByValue('sausages','2'); 将在ID为“香肠”的选择对象中找到并选择值为“ 2”的选项。
戴夫

2
@Neal Uh ...它回答了这个问题?
Mark Amery 2013年

10

我知道这是一篇过时的文章,但是我无法使用jQuery 1.10.3和上述解决方案通过文本进行选择。我最终使用了以下代码(spoulson解决方案的变体):

      var textToSelect = "Hello World";

      $("#myDropDown option").each(function (a, b) {
            if ($(this).html() == textToSelect ) $(this).attr("selected", "selected");
        });

希望它可以帮助某人。



7
 $("#Test").find("option:contains('two')").each(function(){
     if( $(this).text() == 'two' ) {
        $(this).attr("selected","selected");
     }
 });

if语句与“两个”和“两个三”完全匹配


不,那不是我的意思。我认为我的评论有点不清楚,因此我删除了它。不过,我确实赞成您的回答,因为它适合我的情况。
Jagd

6

1.7+的最简单方法是:

$("#myDropDown option:text=" + myText +"").attr("selected", "selected"); 

1.9+

$("#myDropDown option:text=" + myText +"").prop("selected", "selected"); 

经过测试和工作。


1
不是1.9+,不是。从1.6开始,您应该.prop用来更改DOM属性,而不是.attr(用于HTML / DOM属性)。参见stackoverflow.com/q/5874652/1709587
Mark Amery 2013年

我将使用(“ selected”,true)代替“ selected”的真实值
mplungjan


4

看一下jQuery selectedbox插件

selectOptions(value[, clear]): 

使用字符串作为参数$("#myselect2").selectOptions("Value 1");或正则表达式按值选择选项$("#myselect2").selectOptions(/^val/i);

您还可以清除已选择的选项: $("#myselect2").selectOptions("Value 2", true);


3

只是旁注。未设置我选择的值。我已经在网上搜索了。实际上,从Web服务回叫后,我必须选择一个值,因为我正在从中获取数据。

$("#SelectMonth option[value=" + DataFromWebService + "]").attr('selected', 'selected'); 
$("#SelectMonth").selectmenu('refresh', true);

因此,刷新选择器是我唯一缺少的东西。


这是正确的-完全...我认为第二行没有理由。应该按原样工作。
Sagive SEO'2

2

我发现通过使用attr您最终会在不想使用时选择多个选项-解决方案是使用prop

$("#myDropDown option:text=" + myText +"").prop("selected", "selected");


1

我在上面的示例中遇到了问题,该问题是由于我的选择框值预填充了固定长度的6个字符的字符串而导致的,但是传入的参数不是固定长度的。

我有一个rpad函数,它将正确填充字符串,达到指定的长度,并带有指定的字符。因此,在填充参数后,它就可以工作了。

$('#wsWorkCenter').val(rpad(wsWorkCenter, 6, ' '));


function rpad(pStr, pLen, pPadStr) {
if (pPadStr == '') {pPadStr == ' '};
while (pStr.length < pLen)
    pStr = pStr + pPadStr;
return pStr; 
} 

1
 $('#theYear').on('change', function () {
 FY = $(this).find('option:selected').text();
 $('#theFolders').each(function () {
     $('option:not(:contains(' + FY + '))', this).hide();
 });
 $('#theFolders').val(0);
});

$('#theYear').on('mousedown', function () {
 $('#theFolders option').show().find('option:contains("Select")', this).attr('selected', 'selected');
});

0

这个公认的答案似乎不正确,而.val('newValue')对于该函数是正确的,尝试按其名称检索选择对我不起作用,我必须使用id和classname来获取我的元素


0

这是一个简单的选择。只需设置列表选项,然后将其文本设置为选定值即可:

$("#ddlScheduleFrequency option").selected(text("Select One..."));

-1

获取选择框的子级;遍历他们;找到所需的选项后,将其设置为选定的选项;返回false停止循环。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.