jQuery - 通过文本描述设置选择控件的选定值

IT技术 javascript jquery
2021-01-12 06:17:51

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

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

我知道按值设置它非常简单。例如

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

但我有点难以通过文字描述来做这件事。我想一定有办法从文本描述中获取value,但我的大脑在周五下午太忙了,无法计算出来。

6个回答

按描述选择 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>

jQuery 1.6 以下且大于等于 1.4 的版本

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>

请注意,jQuery 1.4 现在已将此行为更改为value如果已指定属性,则选择按,如果value属性丢失,则仅按文本选择所以在这个例子中$('select').val('Two')会选择 1.3.x 中的第二个选项,但在 1.4.x 中什么也不做。
2021-03-13 06:17:51
在更新的 jQuery 版本中, .val('not-an-option-value') 会将选择重置为第一个选项。
2021-03-22 06:17:51
那么,现在在 1.4 中执行此操作的最佳方法是什么?
2021-03-24 06:17:51
这感觉它不应该工作(看起来它可能模棱两可)但实际上对我来说应该可以正常工作。谢谢。
2021-03-27 06:17:51
这个问题的第一个答案似乎是 1.3.x 后的解决方案stackoverflow.com/questions/3644449/...
2021-04-01 06:17:51

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

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

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

$("#my-Select option[text=" + myText +"]").prop("selected", true);
在许多情况下,不幸的是,这种方法不起作用。我什至不得不$("#my-Select option[text=" + myText +"]").get(0).selected = true;时不时地决定采用经典风格:(...
2021-03-21 06:17:51
@spoulson 的回答对我有用......我试着在没有 .each 的情况下做到这一点
2021-03-22 06:17:51
@MarkW 对于 1.9,使用.prop代替.attr更改的原因是在 1.9 中 jQuery 禁用了旧的 hacks,让您可以.attr用来更改某些 DOM 属性以及 HTML 属性。javascript dom properties vs attributes如果您不知道区别,请谷歌。)
2021-03-30 06:17:51
更新了使用.prop('selected', true)而不是.attr('selected', 'selected')jQuery 1.9+ 兼容性的答案
2021-04-05 06:17:51
确保在重新设置之前首先删除选定的属性,否则它似乎不起作用(在 1.9 中对我有用)
2021-04-10 06:17:51

我这样做(jQuery 1.9.1)

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

注意:不要忘记更改(),因此我不得不搜索很长时间:)

这在我的情况下有效,谢谢!但是,这不是根据 OP 要求的显示文本进行选择,而是根据 OP 没有的值本身进行选择吗?
2021-03-14 06:17:51
希望我可以多次投票。戒烟时间过了一个小时,现在我可以回家了。
2021-03-24 06:17:51
很好的答案!简短而简单......这应该是最重要的......继续投票。
2021-03-26 06:17:51
$("#myselect option:contains('YourTextHere')").val();

将返回包含您的文本描述的第一个选项的值。对此进行了测试并有效。

请记住,它只会获取与文本匹配的第一个选项的值。
2021-03-12 06:17:51
此外,您可以将 attr("selected","selected") 链接到包装集而不是 val() 上,这类似于 CarolinaJay65 的答案
2021-03-16 06:17:51
谢谢 - 我认为这可能是我使用的版本,因为当没有匹配的文本时我还需要有逻辑,这似乎是最简单的机制,能够做到这一点。
2021-03-22 06:17:51
OP 说设置值”而不是获取值”
2021-03-28 06:17:51