关于javascript:jQuery – 通过文本描述设置选择控件的选定值

jQuery - setting the selected value of a select control via its text description

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

使用jQuery我想将select控件的selected元素设置为具有我所拥有的文本描述的项目(而不是我没有的值)。

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

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

但是通过文字描述我有点难过。 我想必须有一种从文本描述中获取价值的方法,但是我的大脑在星期五下午也可以解决它。


按jQuery v1.6 +的描述选择

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

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

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

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

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

请注意,虽然此方法适用于1.6以上但小于1.9的版本,但自1.6以来已被弃用。它不适用于jQuery 1.9+。

之前的版本

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

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

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


我没有测试过这个,但这可能对你有用。

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


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

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


我是这样做的(jQuery 1.9.1)

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

注意:不要忘记更改(),我不得不搜索到因为那个:)


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

将返回包含您的文字说明的第一个选项的值。经过测试并且有效。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
}


这条线有效:

1
$("#myDropDown option:contains(myText)").attr('selected', true);

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

1
2
3
4
5
      var textToSelect ="Hello World";

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

希望它可以帮助某人。


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

if语句与"two"完全匹配,"two three"将不匹配


1.7+的最简单方法是:

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

1.9+

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

经过测试和工作。


看看jquery选择的插件

1
selectOptions(value[, clear]):

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

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


这是非常简单的方法。请使用它

1
$("#free").val("y").change();

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

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

所以选择器的刷新是我唯一缺少的东西。


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

<5233>


我上面的例子有问题,问题是由于我的选择框值预填充了6个字符的固定长度字符串,但传入的参数不是固定长度。

我有一个rpad函数,可以正确填充字符串,指定的长度,以及指定的字符。因此,在填充参数后,它可以工作。

1
2
3
4
5
6
7
8
9
$('#wsWorkCenter').val(rpad(wsWorkCenter, 6, ' '));


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

1
2
3
4
5
6
7
8
9
10
11
 $('#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');
});


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

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

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


获取选择框的孩子;循环通过他们;找到想要的那个后,将其设置为所选选项;返回false以停止循环。