我做了个右键菜单,样子和功能就和一般的右键菜单一样。
但我写的时候菜单的html代码都是直接手写的,现在我想让js自动生成,这样就不要每次用到时都去手写html代码了,方便复用。
当然我这里不是问怎么写入,我是想问怎么将菜单的选项传入js函数比较好。
要求:
1.这个是无限多级菜单,即每一个菜单项多可能有子菜单,然后子菜单还可以有子菜单;
2.菜单中菜单项与菜单项间可能有分割线。
下面是我写的一个传参:
{"一级菜单项1":{},"":{},"一级菜单项2":{"二级菜单项1":{},"二级菜单项2":{}},"":{},"一级菜单项3":{}}
我来说明下:这是一个键值对,键为菜单项的值,值为其下级菜单,如果值为{}就是没有下级菜单,键为""就表示这是一条分隔线,可以说这基本上已经完成了传参,但这里有个问题,键值对的键值不能重复,我这里有两个""键,在读取是就变成了一个,也就是说一级菜单项2和一级菜单项3之间的分割线没了,这样的话我也就只有把分隔线的键写成不同的(比如sep_数字),那就必须用代码里再去判断是不是以sep为前缀(好麻烦),而且如果有以sep_开头的菜单项我就不得不去改我的代码了。
嘿嘿写的有点多,我想我的意思都表达清楚了吧,大家帮我想想吧,觉得能在我的基础上改的就改改,你有更好的方法的那就更好了。
麻烦大家了,分肯定给你们的,大家踊跃发表意见
javascript
jquery
参数
html
函数
------解决方案--------------------
忘记中文问题了
{
"menu1":{label:"菜单1",value:"key1"},
"sep_x":"",
"menu2":{label:"菜单2",
"menu2_1":{label:"菜单2_1",value:"key2_1"},
"sep_2_1":"",
"menu2_2":{label:"菜单2_2",
"menu2_2_1":{label:"菜单2_2_1",value:"key_2_2_1"}
}
}
}
funciton showMenu(item){
if("value" in item){
//无下级菜单
}else if(typeOf item =="string"){
//分隔线
}else {
var label= item[label];
//处理本级菜单
delete item[label];
for(var key in item){
showMenu(item[key],tag);
}
}
}
大约如此
------解决方案--------------------
[
{
txt :'菜单1' ,
value : '1' ,
children : [
{
txt :'菜单12' ,
value : '12'
},'-',/*if(typeof xxx=='string' && xxx=='-'){这个是分隔线} */
{