更改 HTML Select 元素的选定选项

IT技术 javascript jquery html
2021-01-22 09:28:25

在我的 HTML 中,我有一个<select>包含三个<option>元素。我想使用 jQuery 来根据 Javascript 检查每个选项的值var如果匹配,我想设置该选项的 selected 属性。我该怎么做?

6个回答

原生 JavaScript

使用普通的旧 JavaScript:

var val = "Fish";
var sel = document.getElementById('sel');
document.getElementById('btn').onclick = function() {
  var opts = sel.options;
  for (var opt, j = 0; opt = opts[j]; j++) {
    if (opt.value == val) {
      sel.selectedIndex = j;
      break;
    }
  }
}
<select id="sel">
    <option>Cat</option>
    <option>Dog</option>
    <option>Fish</option>
</select>
<button id="btn">Select Fish</button>

jQuery

但如果你真的想使用 jQuery:

var val = 'Fish';
$('#btn').on('click', function() {
  $('#sel').val(val);
});

jQuery - 使用值属性

如果您的选项具有与其文本内容不同的值属性,并且您想通过文本内容进行选择:

<select id="sel">
    <option value="1">Cat</option>
    <option value="2">Dog</option>
    <option value="3">Fish</option>
</select>
<script>
    var val = 'Fish';
    $('#sel option:contains(' + val + ')').prop({selected: true});
</script>

演示

但是,如果您确实进行了上述设置并希望使用 jQuery 按值进行选择,则可以像以前一样:

var val = 3;
$('#sel').val(val);

现代DOM

对于支持document.querySelectorHTMLOptionElement::selected属性的浏览器,这是完成此任务的更简洁的方法:

var val = 3;    
document.querySelector('#sel [value="' + val + '"]').selected = true;

演示

淘汰赛.js

<select data-bind="value: val">
    <option value="1">Cat</option>
    <option value="2">Dog</option>
    <option value="3">Fish</option>
</select>
<script>
    var viewModel = {
        val: ko.observable()
    };
    ko.applyBindings(viewModel);
    viewModel.val(3);
</script>

演示

聚合物

<template id="template" is="dom-bind">
    <select value="{{ val }}">
        <option value="1">Cat</option>
        <option value="2">Dog</option>
        <option value="3">Fish</option>
    </select>
</template>
<script>
    template.val = 3;
</script>

演示

角 2

注意:这尚未针对最终稳定版本进行更新。

<app id="app">
    <select [value]="val">
        <option value="1">Cat</option>
        <option value="2">Dog</option>
        <option value="3">Fish</option>
    </select>
</app>
<script>
    var App = ng.Component({selector: 'app'})
        .View({template: app.innerHTML})
        .Class({constructor:  function() {}});

    ng.bootstrap(App).then(function(app) {
        app._hostComponent.instance.val = 3;
    });
</script>

演示

视图 2

<div id="app">
    <select v-model="val">
        <option value="1">Cat</option>
        <option value="2">Dog</option>
        <option value="3">Fish</option>
    </select>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
                val: null,
        },
        mounted: function() {
                this.val = 3;
        }
    });
</script>

演示

对于虐待狂: document.evaluate(".//select[@id='sel']/option[text()='Fish']", document.body, null, 9, null).singleNodeValue.selected = true;
2021-03-15 09:28:25
@aelgoa jsperf.com/option-select-loop/2我更正了你的第一个片段,以更加模仿我的代码,这让我的代码变慢了。我使用了后增量而不是前增量,然后我添加了另一个比你的第三个测试稍微快一点的测试。
2021-04-02 09:28:25
感谢您包含 vanilla javascript - 对于我们这些喜欢为自己编码的人:)
2021-04-07 09:28:25
@llihttocs 现在呢?
2021-04-09 09:28:25
这特别有用,因为我不确定如何设置 selected 属性。我没有意识到有一个 selectedIndex。谢谢。
2021-04-11 09:28:25

此处使用 jquery 的示例实际上都不是正确的,因为即使值已更改,它们也会使选择显示第一个条目。

选择阿拉斯加并让选择显示正确的项目的正确方法是使用:

<select id="state">
    <option value="AL">Alabama</option>
    <option value="AK">Alaska</option>
    <option value="AZ">Arizona</option>
</select>

使用 jquery 将是:

$('#state').val('AK').change();

您可以使用 JavaScript 更改 select 元素的值,从而将所选选项更改为具有该值的选项:

document.getElementById('sel').value = 'bike';​​​​​​​​​​

演示

这不会在选择元素上触发更改事件。你有解决方案吗?
2021-03-14 09:28:25
由于时间原因,您的示例不太适用。我更新它以等到用户单击按钮: jsfiddle.net/xkqTR/3271
2021-03-30 09:28:25

标记

<select id="my_select">
    <option value="1">First</option>
    <option value="2">Second</option>
    <option value="3">Third</option>
</select>

jQuery

var my_value = 2;
$('#my_select option').each(function(){
    var $this = $(this); // cache this jQuery object to avoid overhead

    if ($this.val() == my_value) { // if this option's value is equal to our value
        $this.prop('selected', true); // select this option
        return false; // break the loop, no need to look further
    }
});

演示

我认为这正是我所需要的。我已经使用了你的几行代码,它似乎有效。感谢您提供的精彩片段。
2021-04-01 09:28:25
@llihttocs:很高兴我有所帮助。通过单击答案左上角投票计数下方的空勾,您可以随意接受可以解决您问题的答案。这样这个问题就会被标记为已解决,其他正在寻找相同解决方案的人将很容易找到答案。
2021-04-02 09:28:25

我想将选择元素的选定选项的值和文本内容(我们看到的)更改为“芒果”。

最简单的代码如下:

var newValue1 = 'Mango'

var selectElement = document.getElementById('myselectid');
selectElement.options[selectElement.selectedIndex].value = newValue1;
selectElement.options[selectElement.selectedIndex].textContent = newValue1;

希望能帮助某人。祝你好运。
如果这对您有帮助,请投票。