【问题标题】:How to make menu button removeClass for two levels of unordered list?如何为两级无序列表制作菜单按钮removeClass?
【发布时间】:2016-06-17 20:38:41
【问题描述】:

我正在尝试解决我的移动菜单问题,如果用户使用切换按钮关闭子子菜单,则在重新打开子菜单时,菜单的所有下级(孙子菜单)当前仍保持打开状态。

我正在尝试通过单击ul ulsubmenu 按钮关闭子菜单来实现它,同时删除ul ul ul 孙子菜单的.open 类。

问题似乎是由于我使用 jQuery 插入它们的方式,我无法为子菜单按钮提供 id 或类。因此,我无法告诉每个级别的子菜单按钮要定位到哪个级别的菜单。

我尝试使用.children().find() 选择器的组合来实现此目的,但没有取得任何成功。谁能告诉我这样做的正确方法?

注意: 我已经使用PHP通过Wordpress配置菜单结构,所以我对html几乎没有控制

https://jsfiddle.net/8nj5y4t1/44/

HTML:

<nav class="main-menu" id="mobile">
    <div class="menu-header-menu-container">
        <ul id="menu-header-menu-1" class="menu">
            <li class="hide-desktop menu-item menu-item-type-post_type menu-item-object-page menu-item-1386"><a href="http://www.mywebsite.com">Link 1</a></li>
            <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-463"><a href="http://www.mywebsite.comwork/">Link 2</a>
                <ul class="sub-menu">
                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-584"><a href="http://www.mywebsite.comwork/landscapes/">Child-link 1</a></li>
                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-473"><a href="http://www.mywebsite.comwork/seascapes/">Child-link 2</a></li>
                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-478"><a href="http://www.mywebsite.comwork/macro/">Child-link 3</a></li>
                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-477"><a href="http://www.mywebsite.comwork/cities/">Child-link 4</a></li>
                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-475"><a href="http://www.mywebsite.comwork/long-exposure/">Child-link 5</a>
                        <ul class="sub-menu">
                             <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-480"><a href="http://www.mywebsite.comwork/miscellaneous/">Grandchild-link 1</a></li>
                        </ul>
                    </li>
                </ul>
            </li>
            <li class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-2 current_page_item menu-item-has-children menu-item-10"><a href="http://www.lucieaverillphotography.co.uk/about/">Link 3</a>
            </li>
            <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-464"><a href="http://www.lucieaverillphotography.co.uk/shop/">Link 4</a></li>
            <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-14"><a href="http://www.lucieaverillphotography.co.uk/contact/">Link 5</a></li>
        </ul>
    </div>
</nav>

CSS:

nav.main-menu#mobile {
  min-width:300px;
  max-width:400px;
  background-color:orange;
  padding-top:20px;
  padding-bottom:20px;
}

nav.main-menu#mobile ul { 
    position:relative; 
    overflow: auto; 
    margin:0;
    padding:0;
}

nav.main-menu#mobile ul li {
    display:inline-block; 
    float:left; 
    width: 100%;
    overflow-x: hidden; 
}

nav.main-menu#mobile ul li a {
    display:inline-block;
    height: auto;
    width: 200px;
    padding:15px 0px 15px 30px;
    font-family: Open Sans, Helvetica;
    font-size: 18px;
    color:purple;
    letter-spacing: 0.5px;
    text-decoration: none;
    text-transform: uppercase;
}

.submenu-button {
  cursor:pointer;
  float:right;
  padding:15px 20px 15px 20px;
}

nav.main-menu#mobile ul ul {
  max-height:0;
  width:100%;
  transition: all 800ms;
  background-color:white;
  overflow:hidden;
}

nav.main-menu#mobile ul ul.open { 
  max-height:1000px;
  background-color:green;
}

nav.main-menu#mobile ul ul li {
  transition:2s;
}

nav.main-menu#mobile ul ul li a {
  padding-left: 45px;
  font-size: 16px;
  transition:2s;
}

nav.main-menu#mobile ul ul li.open a {
  color:yellow;
}

nav.main-menu#mobile ul ul ul {
  background-color:white;
}

nav.main-menu#mobile ul ul ul.open {
  background-color:green;
}

nav.main-menu#mobile ul ul ul li a {
  padding-left:60px;
}

jQuery:

jQuery(document).ready(function($) {

$('<span class="submenu-button">+</span>').insertBefore('nav.main-menu#mobile ul li:not(.hide-mobile) ul').parent('li');

$('.submenu-button').click(function() {
    $(this).next().toggleClass('open').children('li').toggleClass('open');
   // $('nav.main-menu#mobile ul li').next().toggleClass('open').children('li').toggleClass('open');

});

});

更新的 JQuery:

$('.submenu-button').click(function() { $(this).toggleClass('open'); $(this).next().toggleClass('open').children('li').toggleClass('open').find('li,ul').removeClass('open');

});

【问题讨论】:

    标签: jquery css wordpress


    【解决方案1】:

    我更新了您的 code 来执行此操作,这似乎为我解决了问题(在那个 jsfiddle 中)。我从所有子 'ul' 元素中删除了 'open' 类

    $(this).next().toggleClass('open').children('li').toggleClass('open').find('ul').removeClass('open');

    【讨论】:

    • 谢谢,这似乎有效!有一件事我不明白,希望你能解释一下,为什么这个 removeClass 函数没有取消首先打开 ul 菜单的 toggleClass 函数?
    • 这是一种称为“currying”的编程形式,其中动作在它们呈现的链中执行。首先我们获取 next() 的值并在其上切换类“打开”,然后我们获取它的子“li”元素并在它们上切换类“打开”,然后对于每个“li”元素,我们找到所有他们的子 'ul' 元素,并仅删除一组新的子 'ul' 元素上的类
    • 当然,祝你好运。我最容易记住的是有“集合创建”功能,如查找、子项、过滤和添加 - 然后是“集合修改”功能,如 CSS、文本、HTML 和分离。集合创建函数更改您正在操作的元素数组
    • jsfiddle.net/8nj5y4t1/47 这是否表现出您正在寻找的行为?
    • 很酷,如果你不知道 jquery 选择器中的 ',' 是一个 or 运算符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多