JavaScript 实现无限级下拉列表的递归方法
作者:页面旅途时间:2026-10-24 03:02:51浏览:227
本文介绍利用JavaScript递归函数实现无限级下拉列表的方法。通过定义二维或三维数据源,遍历数组并根据父级ID动态生成Option节点。核心函数FillSelectTree通过递归调用处理子节点,支持指定选中值和层级缩进,适用于组织架构或省市分类等层级数据展示。
JavaScript 实现无限级下拉列表的递归方法
具体实现代码如下所示:
//定义公司部门的二维数组数据源
Office = [
["Dept", "ParentDept"],
["业务部", "0"],
["技术部", "0"],
["市场部", "0"],
["www.yongfa365.com", "业务部"],
["业务部小杨", "业务部"],
["业务部小菜", "业务部"],
["技术部老柳", "技术部"],
["技术部老杨", "技术部"],
["技术部老菜", "技术部"],
["市场部柳先生", "市场部"],
["市场部杨先生", "市场部"],
["市场部菜鸟", "市场部"]
]
//定义省市信息的三维数组数据源
City3 = [
["Dept", "ParentId", "Id"],
["北京", "0", "010"],
["山西", "0", "0359"],
["朝阳区", "010", "001"],
["海淀区", "010", "002"],
["豆各庄", "001", "101"],
["十里堡", "001", "102"],
["中关村", "002", "201"],
["上地", "002", "202"],
["运城地区", "0359", "301"],
["太原市", "0359", "302"],
["永济市", "301", "311"],
["小区", "302", "312"]
];
//调用示例:FillSelectTree("nowhaha", City3, "0", "311", -1)
//参数说明:Select控件ID, 数据源数组, 父级值, 默认选中值, 当前层级(用于生成缩进分隔符)
function FillSelectTree(SelectId, ArrObj, ParentValue, SelectedValue, NowI) {
StrObj = eval(document.getElementById(SelectId));
NowI++;
//判断数据源是二维还是三维结构
if (ArrObj[0].length == 2)
{ ArrNum = 0; }
else
{ ArrNum = 2; }
//遍历数据源生成所有Option选项
for (var i = 0; i < ArrObj.length; i++) {
if (ArrObj[i][1] == ParentValue) {
StrObj.options[StrObj.length] = new Option(String(" ", NowI) + ArrObj[i][0], ArrObj[i][ArrNum]);
//检查是否需要默认选中
if (ArrObj[i][ArrNum] == SelectedValue) {
StrObj.options[StrObj.length - 1].selected = true;
}
//递归处理子节点
FillSelectTree(SelectId, ArrObj, ArrObj[i][ArrNum], SelectedValue, NowI);
}
}
}
//辅助函数:生成指定次数的字符串
function String(str, nowi) {
strtemp = "";
for (var i = 0; i < nowi; i++) {
strtemp += str;
}
return strtemp;
}<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <hr /> <select id="nowhaha"> </select> <select id="NowOffice"> </select> </body> </html> [Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
作者最新文章
JS监听滚动事件:回到顶部按钮的显示与隐藏逻辑
2026-11-05 16:19:37
JavaScript怎么读写LocalStorage与SessionStorage
2026-11-05 15:40:11
anime.js 与 GSAP 对比:轻量级项目该怎么选择动画库
2026-11-05 11:24:55
flv.js 与 hls.js 在直播场景下的选型对比
2026-11-05 08:18:52
JavaScript能做什么?前端开发中的作用与应用场景解析
2026-11-04 23:17:54
