码迷,mamicode.com
首页 > 其他好文 > 详细

事件委托实现树形菜单

时间:2020-07-11 21:19:43      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:app   点击空白   hid   元素   children   bsp   func   select   node   

HTML:

<ul class="tree" id="tree">
    <li>Animals
      <ul>
        <li>Mammals
          <ul>
            <li>Cows</li>
            <li>Donkeys</li>
            <li>Dogs</li>
            <li>Tigers</li>
          </ul>
        </li>
        <li>Other
          <ul>
            <li>Snakes</li>
            <li>Birds</li>
            <li>Lizards</li>
          </ul>
        </li>
      </ul>
    </li>
    <li>Fishes
      <ul>
        <li>Aquarium
          <ul>
            <li>Guppy</li>
            <li>Angelfish</li>
          </ul>
        </li>
        <li>Sea
          <ul>
            <li>Sea trout</li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>

 

JS:

<script>
    // 将所有li包装到span中
    // 因为正常的li会占据100%的宽度,而span恰好是内容的宽度
    //避免点击空白时触发事件
    for (let li of tree.querySelectorAll(‘li‘)) {
      //创建span元素
      let span = document.createElement(‘span‘);
      //在每个li之前插入span
      li.prepend(span);
      //span的结尾插入span的下一个兄弟(是li)
      span.append(span.nextSibling); 
    // move the text node into span
    }

    // catch clicks on whole tree
    tree.onclick = function(event) {

      if (event.target.tagName != ‘SPAN‘) {
        return;
      }

      let childrenContainer = event.target.parentNode.querySelector(‘ul‘);
      if (!childrenContainer) return; // no children

      childrenContainer.hidden = !childrenContainer.hidden;
    }
  </script>

 

事件委托实现树形菜单

标签:app   点击空白   hid   元素   children   bsp   func   select   node   

原文地址:https://www.cnblogs.com/LangZ-/p/13285284.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!