javascript - 使用 jQuery 从未知深度的嵌套 JSON 构建级联下拉列表

标签 javascript jquery json

我正在尝试从嵌套的 JSON 对象动态构建级联下拉列表,该对象可以是任何深度,但在实现上遇到了困难。

来自服务器的 JSON 如下所示:

var data = {
    typ: 'Gren',
    namn: 'Bana',
    items: [{
        typ: 'Disciplin',
        namn: 'Eliminiering',
        items: [{
            typ: 'Klass',
            namn: 'Damer Elit',
            items: []
        }, {
            typ: 'Klass',
            namn: 'Damer Junior',
            items: []
        }]
    }, {
        typ: 'Disciplin',
        namn: 'Poänglopp',
        items: [{
            typ: 'Klass',
            namn: 'Damer Senior',
            items: []
        }, {
            typ: 'Klass',
            namn: 'Flickor 13-14',
            items: []
        }]
    }]
};

因此第一个下拉列表应包含两项:ElimineringPoänglopp。如果在第一个下拉列表中选择了 Elimiering,则第二个下拉列表应包含:Damer ElitDamer Junior。如果选择 Poänglopp,第二个下拉列表应包含:Damer SeniorFlickor 13-14。 等等。

如果 items 数组为空,则表示没有子类别,因此无需创建更多下拉菜单。再次强调:数组可以是任何深度。

非常感谢任何如何实现这一点的帮助/想法!

最佳答案

您可以通过递归非常轻松地完成类似的事情。

这是一个粗略的示例。

DEMO

function toggleChildren (e) {
  e.stopPropagation();
  
  var el = $(this);
  el.children('ul').toggle();
}

function buildNests (obj, parent) {
  var item = $('<li />', {
    text: obj.namn,
    on: {
      click: toggleChildren
    }
  }),
  list = $('<ul />', {
    html: [item]
  });
  
  parent.append(list);
  
  if (obj.items.length > 0) {
    obj.items.forEach(function (e) {
      buildNests(e, item);
    });
  }
}

var data = {
    typ: 'Gren',
    namn: 'Bana',
    items: [{
        typ: 'Disciplin',
        namn: 'Eliminiering',
        items: [{
            typ: 'Klass',
            namn: 'Damer Elit',
            items: []
        }, {
            typ: 'Klass',
            namn: 'Damer Junior',
            items: []
        }]
    }, {
        typ: 'Disciplin',
        namn: 'Poänglopp',
        items: [{
            typ: 'Klass',
            namn: 'Damer Senior',
            items: []
        }, {
            typ: 'Klass',
            namn: 'Flickor 13-14',
            items: []
        }]
    }]
};

buildNests(data, $('#con'));
<div id="con"></div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

关于javascript - 使用 jQuery 从未知深度的嵌套 JSON 构建级联下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30726193/

相关文章:

JavaScript:理解 for 循环中的 let 范围

javascript - Web 应用程序中具有置信区间的条形图

jquery - 使用 jQuery 更改图像?

javascript - 多个变量和提示

javascript - 在 emberJS 中运行时生成方法

javascript - 单击一组 anchor 元素时切换图像

jquery - 想只在主菜单而不是子菜单上有 Jquery 效果

java - 如何根据特定键的值 null 删除 JSON 数组中的 JSON 对象?

android - 如何编辑我的 mysql 数据库?

Json.Net 反序列化,保持一些属性未序列化