JQuery创建新的选择选项

van*_*van 33 html javascript jquery jquery-selectors

我在常规JavaScript中创建选择选项具有以下功能.有没有办法用jQuery做到这一点而不必使用表单对象?也许将选项存储为JSON对象数组并在调用函数中解析它...

function populate(form)
{
form.options.length = 0;
form.options[0] = new Option("Select a city / town in Sweden","");
form.options[1] = new Option("Melbourne","Melbourne");
}
Run Code Online (Sandbox Code Playgroud)

以下是我如何调用上面的函数:

populate(document.form.county); //county is the id of the dropdownlist to populate.    
Run Code Online (Sandbox Code Playgroud)

Har*_*83- 60

就像是:

function populate(selector) {
  $(selector)
    .append('<option value="foo">foo</option>')
    .append('<option value="bar">bar</option>')
}

populate('#myform .myselect');
Run Code Online (Sandbox Code Playgroud)

甚至:

$.fn.populate = function() {
  $(this)
    .append('<option value="foo">foo</option>')
    .append('<option value="bar">bar</option>')
}

$('#myform .myselect').populate();
Run Code Online (Sandbox Code Playgroud)


Tej*_*ejs 42

关于什么

var option = $('<option/>');
option.attr({ 'value': 'myValue' }).text('myText');
$('#county').append(option);
Run Code Online (Sandbox Code Playgroud)

  • 使用jQuery 1.4+,你可以这样做:`$('<option />',{value:'myValue'}).text('myText').appendTo('#country');` (19认同)
  • 构建选项列表稍微高效一点,然后将它们附加到DOM,这样每次都不会导致重排.请参阅https://developers.google.com/speed/articles/reflow和http://stackoverflow.com/questions/510213/when-does-reflow-happen-in-a-dom-environment (5认同)

Caf*_*eek 13

怎么样

$('#county').append(
    $('<option />')
        .text('Select a city / town in Sweden')
        .val(''),
    $('<option />')
        .text('Melbourne')
        .val('Melbourne')
);
Run Code Online (Sandbox Code Playgroud)


mdB*_*der 10

如果你需要制作单个元素,你可以使用这个结构:

$('<option/>', {
    'class': this.dataID,
    'text': this.s_dataValue
}).appendTo('.subCategory');
Run Code Online (Sandbox Code Playgroud)

但是如果你需要打印许多元素,你可以使用这种结构:

function printOptions(arr){
    jQuery.each(arr, function(){
        $('<option/>', {
            'value': this.dataID,
            'text': this.s_dataValue
        }).appendTo('.subCategory');
    });
}
Run Code Online (Sandbox Code Playgroud)


小智 6

一个非常简单的方法来做到这一点......

// create the option
var opt = $("<option>").val("myvalue").text("my text");

//append option to the select element
$(#my-select).append(opt);
Run Code Online (Sandbox Code Playgroud)

这可以通过多种方式完成,如果您确实愿意,甚至可以用一行来完成。


Tim*_*own 5

这令人困惑.当你说"表格对象"时,你的意思是" <select>元素"吗?如果没有,你的代码将无法工作,所以我假设你的form变量实际上是对<select>元素的引用.为什么要重写此代码?自1996年左右以来,您所拥有的所有可编写脚本的浏览器都能使用,并且不会很快停止工作.使用jQuery会立即使您的代码变得更慢,更容易出错并且不会在浏览器中兼容.

这是一个使用当前代码作为起点并<select>从对象填充元素的函数:

<select id="mySelect"></select>

<script type="text/javascript>

function populateSelect(select, optionsData) {
    var options = select.options, o, selected;
    options.length = 0;
    for (var i = 0, len = optionsData.length; i < len; ++i) {
        o = optionsData[i];
        selected = !!o.selected;
        options[i] = new Option(o.text, o.value, selected, selected);
    }
}

var optionsData = [
    {
        text: "Select a city / town in Sweden",
        value: ""
    },
    {
        text: "Melbourne",
        value: "Melbourne",
        selected: true
    }
];

populateSelect(document.getElementById("mySelect"), optionsData);

</script>
Run Code Online (Sandbox Code Playgroud)