原生JS MVC模式书写三级联动

    h5{
        padding-left: 1em;
    }
    h6{
        padding-left: 2em;
    }
    .show{
        display: block;
    }
    .hide{
        display: none;
    }
    
 <div id="root"></div>

!! 特别注意 模板字符串与${ }的 反复使用,容易出错!!

 <script>
        // M
        var data = [
            {
                title: '学科',
                second: [
                    { title1: '语文', content: ['古代文学', '近代文学'], state: false },
                    { title1: '数学', content: ['几何', '代数'], state: false }
                ],
                state: true
            },
            {
                title: '班级',
                second: [
                    { title1: '实验班', content: ['火箭班', '精英班'], state: false },
                    { title1: '普通班', content: ['一般普通', '特别普通'], state: false }
                ],
                state: false
            },
        ]

        // V
        function render() {
            document.getElementById('root').innerHTML = `
                <div>
                    ${
                data.map((obj, i) => `
                            <h3 class='h3' onclick='state(${i})'>
                                ${obj.title}
                                <!--判断state状态,展示+或--->
                                ${obj.state ? '-' : "+"}
                                ${
                    obj.second.map((obj2, index) => `
                                    <!-- 模板字符串!!!!!!-->
                                        <h5 ${obj.state ? `class='show'` : `class='hide'`} οnclick='state2(${index},${i})'>
                                            ${obj2.title1}
                                            ${obj2.state ? '-' : '+'}
                                            ${
                        obj2.content.map(obj3 => `
                                              <!-- 模板字符串!!!!!!-->
                                                    <h6  ${obj.state && obj2.state ? `class='show'` : `class='hide'`}>${obj3}</h6>
                                                `).join('')
                        }
                                        </h5>
                                    `).join('')
                    }
                            </h3>
                        `).join('')
                }
                </div>
            `
        };
        render();

        // c
        // 一级菜单开关
        state = function (i) {
            data[i].state = !data[i].state;  //改变打开 / 关闭的 + -符号状态
            render();
        };
        // 二级菜单开关
        var flag = false;
        state2 = function (index, i) {
            if (!flag) {
                data[i].second[index].state = true;
                flag = !flag;
            } else {
                data[i].second[index].state = false;
                flag = !flag;
            }
            render()
        };
    </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值