【发布时间】:2019-02-11 15:41:56
【问题描述】:
想做一个通用的级联下拉菜单,但递归很弱
代码应该以
结尾- 选择物品 - 衣服或小工具 - 做出选择时
- Levis/Gucci 或 LG/Apple 可供选择 - 做出选择时
- Levis 牛仔裤或夹克或 Gucci 鞋子或连衣裙可供选择 - 选择时
- Levis 牛仔裤尺码或 Levis 夹克尺码或 可供选择
- 可选择 Gucci 鞋码或 Gucci 连衣裙码
或
- 选择 LG 电视或手机或 Apple Macbook 或 iPhone - 选择时
- 选择 LG 电视尺寸或 LG 手机尺寸或
- Apple Macbook 尺寸或 Apple iPhone 尺寸可供选择
当我真正要递归时,我失去了思路——或者也许可以使用过滤?
我假设可以创建一组路径,然后根据路径显示/隐藏
const selObject = {
"-- Select Item --": {
"Clothes": {
"-- Select brands --": {
"Levis": {
"-- Select product --": {
"Jeans": {
"-- Select size --": [
"38",
"39",
"40"
]
},
"Jackets": {
"-- Select size --": [
"41",
"42",
"43"
]
}
}
}, // end Levis
"Gucci": {
"-- Select product --": {
"Shoes": {
"-- Select size --": [
"45",
"50",
"55"
]
},
"Dresses": {
"-- Select size --": [
"8",
"9",
"10"
]
}
}
} // end Gucci
} // end brands
}, // End clothes
"Gadgets": {
"-- Select brands --": {
"LG": {
"-- Select product --": {
"TVs": {
"-- Select size --": [
"38",
"39",
"40"
]
},
"Phones": {
"-- Select size --": [
"8",
"9",
"10"
]
}
}
}, // end Levis
"Apple": {
"-- Select product --": {
"Macbooks": {
"-- Select size --": [
"15",
"17",
"21"
]
},
"iPhones": {
"-- Select size --": [
"8",
"9",
"10"
]
}
}
} // end Apple
} // end brands
} // end Gadgets
} // end items
} // end
function createSel(obj) {
Object.keys(obj).forEach(function(item) {
if (typeof obj[item] == "object") {
var list = obj[item];
//console.log(item,typeof list);
if (typeof list == "object") {
if (list.length) {
list.forEach(function(val) {
console.log('<br/>'+val)
})
}
else createSel(list)
}
} else {
console.log("no", obj[item])
}
});
}
window.onload = function() {
createSel(selObject)
}
<form name="myform" id="myForm">
<div id="selContainer">
</div>
</form>
【问题讨论】:
-
这最好作为一个向下钻取菜单,而不是选择框。比如:filamentgroup.com/examples/menus/ipod.html
-
当然,但这不是规范。我想帮助一个朋友
-
您究竟需要什么帮助?要创建下拉元素还是只是浏览您的结构?
-
快速提问,环境是Html吗?你有义务用javascript做吗?完整的CSS不是一个选项? (用一个很小的 javascript 函数从 json 文件或其他任何东西构建菜单)
-
答案做得很好
标签: javascript cascadingdropdown