【问题标题】:Create html select with optgroup from json使用来自 json 的 optgroup 创建 html 选择
【发布时间】:2012-12-07 01:23:30
【问题描述】:

我有一个 JSON 字符串(来自 php json_encode),看起来像;

var json = [{"Foo":[{"id":1,"name":"aaa"},{"id":2,"name":"bbb"}]},{"Bar":[{"id":3,"name":"ccc"},{"id":4,"name":"ddd"}]}];

我希望能够在表单中使用 Javascript/jQuery 创建一个 html 选择;

<select>
    <optgroup label="Foo">
        <option value="1">aaa</option>
        <option value="2">bbb</option>
    </optgroup>
    <optgroup label="Bar">
        <option value="3">ccc</option>
        <option value="4">ddd</option>
    </optgroup>
</select>

在处理 json 方面,我得到了 this far(我知道不远),但 jsFiddle 无法运行它并冻结了我的浏览器。

var json = [{"Foo":[{"id":1,"name":"aaa"},{"id":2,"name":"bbb"}]},{"Bar":[{"id":3,"name":"ccc"},{"id":4,"name":"ddd"}]}];

$.each(json, function(i,group) {
    console.log(i);
    $.each(group, function(j, option) {
        console.log(j, option);
        $.each(option, function(k, item) {
            console.log(k, item);
        });
    });
});​

【问题讨论】:

  • 将你的小提琴设置为使用 jQuery 而不是 MooTools,它似乎运行得很好jsfiddle.net/DVKMK/1
  • 他正在尝试动态创建 ,他的 JS 没有这样做。

标签: javascript jquery json


【解决方案1】:

这应该运行得很好。

var $select = $("<select>");
$select.appendTo("#somewhere");

$.each(json, function(i, optgroups) {
    $.each(optgroups, function(groupName, options) {
        var $optgroup = $("<optgroup>", {label: groupName});
        $optgroup.appendTo($select);

        $.each(options, function(j, option) {
            var $option = $("<option>", {text: option.name, value: option.id});
            $option.appendTo($optgroup);
        });
    });
});

【讨论】:

  • 您希望 var $select = $("&lt;select&gt;"); 在每个之外,否则它将为每个组创建一个。 jsfiddle.net/DVKMK/3
  • @webnoob 绝对。感谢您的提示。
猜你喜欢
  • 2012-04-09
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 2016-11-28
相关资源
最近更新 更多