menu菜单栏通过动态数组数据交互展示

原生JS操作节点方法: 

<body>

<nav id="myNav">
<!--  <ul>-->
<!--    <li>-->
<!--      <a href="#">首页</a>-->
<!--        <ul>-->
<!--            <li>菜单1</li>-->
<!--        </ul>-->
<!--    </li>-->
<!--  </ul>-->
</nav>

<script>
  let myNav=document.getElementById("myNav");
  let menu=[
            {name:"首页"},
            {
                name:"博客",
                children:[
                    {name:"菜单一"},
                    {name:"菜单二"},
                    {name:"菜单三"}
                ]
            },
            {
                name:"技术支持",
                children:[
                    {name:"菜单一"},
                    {name:"菜单二"},
                    {name:"菜单三"},
                    {name:"菜单四"}
                ]
            },
            {name:"操作"},
            {name:"帮助"},
            {name:"新闻"},
            {
                name:"新闻222",
                children:[
                    {name:"呵呵呵"}
                ]
            }
        ]


  function showLi(menu,objNode){
      // 创建ul
      let ul=document.createElement("ul");
      console.log(menu)
      menu.forEach(function(item,index){
          let a,li,atext;
          if(item.children){  //有子菜单
              a=document.createElement("a");
              li=document.createElement("li");
              atext=document.createTextNode(item.name);
              a.appendChild(atext)
              li.appendChild(a);
              ul.appendChild(li);

              //样式
              li.className=""
              a.className=""

            //递归调用
            showLi(item.children,li)
          }else{  //没有子菜单
              ul.innerHTML+=`<li><a class="aT">${item.name}</a></li>`
              let aT=document.getElementsByClassName("aT");

          }
      })


      objNode.appendChild(ul);


      let alist=document.getElementsByTagName("a");

      // let alist2=document.querySelectorAll("a");
      //
      // console.log(alist2)


      console.log(alist)

      for(let i=0;i<alist.length;i++){
          alist[i].onclick=function (){
              // console.log(this)
              openMenu(this)
          }
      }

  }



  showLi(menu,myNav)

  function openMenu(obj){
      console.log(obj)
  }
</script>

</body>

jQuery操作节点方法:

<script src="../jquery-3.7.1.js"></script>

    <script>

        let menu=[
            {name:"首页"},
            {
                name:"博客",
                children:[
                    {name:"菜单一"},
                    {name:"菜单二"},
                    {name:"菜单三"}
                ]
            },
            {
                name:"技术支持",
                children:[
                    {name:"菜单一"},
                    {name:"菜单二"},
                    {name:"菜单三"},
                    {name:"菜单四"}
                ]
            },
            {name:"操作"},
            {name:"帮助"},
            {name:"新闻"},
            {
                name:"新闻222",
                children:[
                    {name:"呵呵呵"}
                ]
            }
        ]

        function showLi(menu,objNode){
            // console.log(menu)
            //jquery创建ul节点
            let ul=$("<ul></ul>");
            console.log(ul)
            menu.forEach((item)=>{
                if(item.children){  //有子菜单
                    // console.log(item.children)
                    //jquery创建li节点
                    let li=$(`<li></li>`)
                    //jquery创建a节点
                    let a=$(`<a href="#">${item.name}</a>`)
                    li.append(a);
                    //每循环一次就把符合条件的li添加进ul节点里面
                    ul.append(li)

                    //设置需要的样式
                    li.css("list-style","none")
                    a.css("text-decoration","none")

                    //递归调用
                    showLi(item.children,li);

                }else{  //没有子菜单
                    // console.log(item.children)
                    let li=`<li><a href="#" class="aT">${item.name}</a></li>`
                    // 每循环一次就把符合条件的li添加进ul节点里面
                    ul.append(li);

                }
            })

            objNode.append(ul);

            //设置循环点击a标签的操作
            for(let i=0;i<$("a").length;i++){
                $(`a:eq(${i})`).click(function(){
                    console.log(111)
                    openMenu(this);
                })
            }
        }

        showLi(menu,$("#myNav"))

        //点击a标签的函数
        function openMenu(obj){
            console.log(obj)
        }
    </script>

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值