从简单列表创建下拉菜单

海天

我的当前列表如下所示:

<ul>
   <li><a href="#">Menu 1</a></li>
   <li><a href="#">_Submenu a</a></li>
   <li><a href="#">_Submenu b</a></li>
   <li><a href="#">_Submenu c</a></li>
   <li><a href="#">Menu 2</a></li>
   <li><a href="#">Menu 3</a></li>
   <li><a href="#">_Submenu x</a></li>
   <li><a href="#">_Submenu y</a></li>
   <li><a href="#">Menu 4</a></li>
</ul>

我如何使用Jquery来创建像这样的下拉菜单。

  <ul>
      <li><a href="#">Menu 1</a>
         <ul>
           <li><a href="#">_Submenu a</a></li>
           <li><a href="#">_Submenu b</a></li>
           <li><a href="#">_Submenu c</a></li>
         </ul>
      </li>
      <li><a href="#">Menu 2</a></li>
      <li><a href="#">Menu 3</a>
         <ul>
            <li><a href="#">_Submenu x</a></li>
            <li><a href="#">_Submenu y</a></li>
         </ul>
      </li>
      <li><a href="#">Menu 4</a></li>
 </ul>

这意味着在主项目之后的某些带有“ _”的项目将被添加为主项目的下拉项目。谢谢您帮忙。

用户名

您可以使用以下逻辑来达到所需的效果。

  1. 创建一个公共缓存变量以保存上一个顶级菜单。
  2. 循环浏览所有菜单列表项,以检查文本是否以下划线开头。
    • 如果是这样,请将其附加到上一个顶级菜单。
    • 如果不是,则将新的无序列表元素附加到此列表项,并将新列表缓存在先前的顶级菜单变量中。
  3. 循环结束后,您可以选择所有空列表并将其删除(.find('ul:empty').remove())。

在以下示例中,在某些情况下,我偏爱本机DOM API方法而不是jQuery对应方法,因为:

  1. $(this).append('<ul></ul>')返回$(this)而不是新创建的列表。解决方法是添加另一行代码,或者仅使用DOM APIthis.appendChild($('<ul>')[0])来返回新创建的列表。和...
  2. 在使用DOM API一样简单的情况下,使用jQuery似乎很浪费。请参阅:youmightnotneedjquery.com

var prev;
$('.menu li').each(function(){
    if(/^_/.test(this.textContent) && prev) {
        prev.appendChild(this);
    } else {
        prev = this.appendChild($('<ul>')[0]);
    }
}).find('ul:empty').remove();
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<ul class="menu">
   <li><a href="#">Menu 1</a></li>
   <li><a href="#">_Submenu a</a></li>
   <li><a href="#">_Submenu b</a></li>
   <li><a href="#">_Submenu c</a></li>
   <li><a href="#">Menu 2</a></li>
   <li><a href="#">Menu 3</a></li>
   <li><a href="#">_Submenu x</a></li>
   <li><a href="#">_Submenu y</a></li>
   <li><a href="#">Menu 4</a></li>
</ul>

上面的示例产生以下HTML结构:

<ul class="menu">
    <li><a href="#">Menu 1</a>
        <ul>
            <li><a href="#">_Submenu a</a></li>
            <li><a href="#">_Submenu b</a></li>
            <li><a href="#">_Submenu c</a></li>
        </ul>
    </li>
    <li><a href="#">Menu 2</a></li>
    <li><a href="#">Menu 3</a>
        <ul>
            <li><a href="#">_Submenu x</a></li>
            <li><a href="#">_Submenu y</a></li>
        </ul>
    </li>
    <li><a href="#">Menu 4</a></li>
</ul>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP下拉菜单列表类别

来自分类Dev

从简单列表创建的numpy数组的形状

来自分类Dev

单击菜单列表内时不应关闭可单击的下拉菜单

来自分类Dev

jQuery简单下拉菜单

来自分类Dev

更改下拉菜单列表项为正方形

来自分类Dev

更改下拉菜单列表项为正方形

来自分类Dev

更改下拉菜单列表项为正方形

来自分类Dev

我需要在JavaScript的下拉菜单列表中使用哪个事件处理程序?

来自分类Dev

使用单元格内容修改下拉菜单列表

来自分类Dev

下拉菜单的动态列表

来自分类Dev

SwiftUI:创建下拉菜单

来自分类Dev

AngularJS创建下拉菜单

来自分类Dev

创建静态下拉菜单

来自分类Dev

菜单折叠后如何更改Bootstrap Navbar下拉菜单列表项的背景颜色和文本颜色

来自分类Dev

使用JavaScript的简单下拉菜单

来自分类Dev

简单的下拉菜单–悬停时过渡

来自分类Dev

使用JavaScript的简单下拉菜单

来自分类Dev

CSS列表样式下拉菜单定位

来自分类Dev

CSS列表样式下拉菜单定位

来自分类Dev

下拉菜单更改列表元素的位置

来自分类Dev

如何使用列表制作下拉菜单

来自分类Dev

不使用列表的下拉菜单

来自分类Dev

如何创建单选ActionProvider下拉菜单?

来自分类Dev

如何创建动态下拉菜单?

来自分类Dev

如何从枚举创建下拉菜单?

来自分类Dev

动态创建的处理按钮下拉菜单

来自分类Dev

无法创建下拉菜单-jQuery

来自分类Dev

使用JavaScript创建下拉菜单

来自分类Dev

如何创建kivy下拉菜单?