在 HTML 下拉列表中动态显示嵌套的 JSON

如何解决在 HTML 下拉列表中动态显示嵌套的 JSON

我一直在使用 HTML5 BOOTSTRAP-css-JS 在 UI 中添加以下功能

我正在尝试通过使用 JSON 输入来创建 UI 下拉菜单

注意“JSON 键”也可用作下拉值,而不仅仅是一般的“JSON 值”.. 因此,我无法工作找出相同的逻辑!

我有以下格式的 JSON:

{
  "BIKE LIST": {
    "Bajaj": {
      "Pulsar": {
        "350 CC": [
          "2019 Model","2020 Model"
        ],"500 CC": [
          "2018 Model","2021 Model"
        ]
      }
    }
  },"CAR LIST": {
    "Toyota": {
      "Etios": {
        "Liva": [
          "2019 Model","Regular": [
          "2018 Model","2021 Model"
        ]
      }
    },}
}

我想在 UI 中创建 5 个动态下拉菜单,如下所示:

下拉列表 1 值: 自行车清单,汽车清单

下拉列表 2(根据用户在下拉列表 1 中的选择显示的值): 即如果用户选择 BIKE LIST, 我应该有“Bajaj”

下拉列表 3(根据用户在下拉列表 2 中的选择显示的值): 即如果用户选择 Bajaj, 我应该有“脉冲星”

下拉列表 4(根据用户在下拉列表 3 中的选择显示的值): 即如果用户选择 Pulsar, 我应该有“350 CC”、“500 CC”

下拉列表 5(根据用户在下拉列表 4 中的选择显示的值): 即如果用户选择 500 CC, 我应该有“2018模型”,“2021模型”

解决方法

我尽量让它干净

const input = {
    "BIKE LIST": {
        "Bajaj": {
            "Pulsar": {
                "350 CC": [
                    "2019 Model","2020 Model"
                ],"500 CC": [
                    "2018 Model","2021 Model"
                ]
            }
        }
    },"CAR LIST": {
        "Toyota": {
            "Etios": {
                "Liva": [
                    "2019 Model","Regular": [
                    "2018 Model","2021 Model"
                ]
            }
        },}
}

var select1 = document.getElementById("select1");
var select2 = document.getElementById("select2");
var select3 = document.getElementById("select3");
var select4 = document.getElementById("select4");
var select5 = document.getElementById("select5");

function createSelect(params,select_dom) {
    select_dom.innerHTML = "";
    var first_child = null;
    for (const key in params) {
        if (first_child == null) first_child = params[key];
        var option = document.createElement("option");
        if (params.constructor === Array)
            option.text = params[key]
        else
            option.text = key;
        select_dom.add(option);
    }
    return first_child;
}

function initSelect(params,list_dom) {
    var small_input = params;
    for (let index = 0; index < list_dom.length; index++) {
        const element = list_dom[index];
        if (small_input) {
            small_input = createSelect(small_input,element);
        }
    }
}

initSelect(input,[select1,select2,select3,select4,select5])

select1.addEventListener("change",function () {
    initSelect(input[select1.value],[select2,select5])
});
select2.addEventListener("change",function () {
    initSelect(input[select1.value][select2.value],[select3,select5])
});
select3.addEventListener("change",function () {
    initSelect(input[select1.value][select2.value][select3.value],[select4,select5])
});
select4.addEventListener("change",function () {
    initSelect(input[select1.value][select2.value][select3.value][select4.value],[select5])
});
<select id="select1"></select>
<select id="select2"></select>
<select id="select3"></select>
<select id="select4"></select>
<select id="select5"></select>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?