javascript - 如何在 HTML/Javascript 中创建递归菜单?

标签 javascript html css

<分区>


想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post .

关闭 7 年前

请看下图:

enter image description here

我想创建一个这样的菜单,但我不知道如何开始。有什么想法吗?

最佳答案

其实很简单。它包含在递归节点列表中。

您可以通过同时使用 ullia 来实现:

<ul>
  <li>
    <a>Text here</a>
    <!-- repeat -->
  </li>
</ul>

执行该行为也非常简单。您必须查看 a 元素是否有 nextElementSibling,如果有,那是因为当前节点有子节点。

看看下面我创建的示例:

(function() {
  var tree = document.getElementById('tree');

  /* firstly, we hide all the child items */
  [].forEach.call(tree.querySelectorAll('ul li a'), function(el, i) {
    if (el.nextElementSibling)
      el.nextElementSibling.classList.add('hidden');
  });

  /* here we make a event delegation, we add an event handler to the hole tree */
  tree.addEventListener('click', function(e) {
    var el = e.target;

    /* if the element clicked is an anchor, it's because it's a node/leaf */
    if (el.tagName === 'A') {
      e.preventDefault();
      
      /* if it has a nextElementSibling, it's because it has children, so it's a node */
      if (el.nextElementSibling) {
        /* we toggle the visibility of the child */
        el.nextElementSibling.classList.toggle('hidden');
      } else {
        // do something with the final child (leaf)
        console.log(el.textContent);
      }
    }
  });
})();
.hidden {
  display: none;
}
<div id="tree">
  <ul>
    <li>
      <a>Father</a>
      <ul>
        <li>
          <a>Son</a>
        </li>
      </ul>
    </li>
    <li>
      <a>Grandfather</a>
      <ul>
        <li>
          <a>Father</a>
          <ul>
            <li>
              <a>Son</a>
            </li>
          </ul>
        </li>
      </ul>
    </li>
    <li>
      <a>Father</a>
      <ul>
        <li>
          <a>Son</a>
        </li>
      </ul>
    </li>
  </ul>
</div>

关于javascript - 如何在 HTML/Javascript 中创建递归菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32919569/

上一篇:html - 如何调整图像的顶部和同一行的输入?

下一篇:html - 将褪色黑色分隔符从 "-webkit-gradient"转换为 "linear-gradient"

相关文章:

jquery - Toggle 类切换,但不是动画

html - 一页网站基本布局

javascript - 我如何在加载函数中传递带有 url 的字符串变量?

javascript - 加载谷歌地图控件时是否有事件?

javascript - 立即函数与另一个函数调用 Javascript

javascript - 如何通过 Electron 商店添加应用名称和路径以在JSON文件中列出

Javascript if this OR this statement - 忽略第二个条件

javascript - 将背景图像水平固定为标题中的 Logo

html - Bootstrap 媒体查询不适用于小型平板电脑和横向模式

css - scss 输出单独的文件