2016-12-04 39 views
0

我正在侧栏(单一菜单)和(子菜单)。jquery如何隐藏从其他人的单个元素,如果不存在

包含(子菜单)的菜单具有(+ - )切换,而具有选项的菜单没有任何内容。

如何隐藏其他类似元素的(+ - )单个菜单。

我试过这种方式,它隐藏所有的人。

HTML

<div class="multitoggle"> 
    <ul id="accordions"> 
     <li class="nav-parents"> 
      <div class="link"> <span class="plus">+</span> <span class="minus">-</span> <a href="#">CURRENT ACCOUNTS</a></div> 
      <ul class="submenu"> 
       <li><a href="../current/third-level.php">MPOWER CLASSIC</a></li> 
       <li><a href="../current/third-level.php">MPOWER GOLD</a></li> 
       <li><a href="../current/third-level.php">MPOWER PLATINUM</a></li> 
      </ul> 
     </li> 
     <li class="nav-parents"> 
      <div class="link"> <span class="plus">+</span> <span class="minus">-</span> <a href="#">OUR SEGMENTS</a></div> 
     </li> 
    </ul> 
</div> 

JS

$(window).load(function(e) { 
    if ($('.nav-parents').has('submenu').length == 0) { 
     $('.nav-parents').find('.plus, .minus').css('display', 'none'); 
    } 
}); 
+0

为什么不直接从菜单中删除没有子菜单的跨度元素? –

+0

它被集成到Kentico cms中,并且CMS在默认情况下将所有侧边栏视为相同。所以它默认添加(+ - )。 这就是为什么我需要为你的代码实际工作而编写一个自定义脚本 –

+0

@SowemimoBamidele,你只是在子菜单中忘了'.',因为你正在寻找一个类而不是元素,Azim是一条线,但更难读。 –

回答

1

其实只有has()不会在这种情况下工作。您必须使用not()has()的组合。而且你还错过了submenu之前的点。你可以像下面这样做。

$(window).load(function(e) { 
    $('.nav-parents').not(':has(.submenu)').find('.plus, .minus').css('display', 'none'); 
}); 
0

您可以在CSS做它本身的股利将是last-childonly-child,如果它没有一个子菜单。所以你可以通过使用

.nav-parents > div.link:last-child > span{ 
    display:none; 
} 

.nav-parents > div.link:last-child > span{ 
 
    display:none; 
 
}
<div class="multitoggle"> 
 
       <ul id="accordions"> 
 
        <li class="nav-parents"> 
 
         <div class="link"> <span class="plus">+</span> <span class="minus">-</span> <a href="#">CURRENT ACCOUNTS</a></div> 
 
         <ul class="submenu"> 
 
          <li><a href="../current/third-level.php">MPOWER CLASSIC</a></li> 
 
          <li><a href="../current/third-level.php">MPOWER GOLD</a></li> 
 
          <li><a href="../current/third-level.php">MPOWER PLATINUM</a></li> 
 
         </ul> 
 
        </li> 
 
        <li class="nav-parents"> 
 
         <div class="link"> <span class="plus">+</span> <span class="minus">-</span> <a href="#">OUR SEGMENTS</a></div> 
 
        </li> 
 
       </ul> 
 
      </div>

jQuery的方式实现这一目标: -

如果您仍然想这样做jQuery的,你可以通过

轻松去除
$(window).load(function(e) { 
     $('.nav-parents > div.link:only-child > span').css('display', 'none'); 
}); 

$(window).load(function(e) { 
 
     $('.nav-parents > div.link:last-child > span').css('display', 'none'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="multitoggle"> 
 
       <ul id="accordions"> 
 
        <li class="nav-parents"> 
 
         <div class="link"> <span class="plus">+</span> <span class="minus">-</span> <a href="#">CURRENT ACCOUNTS</a></div> 
 
         <ul class="submenu"> 
 
          <li><a href="../current/third-level.php">MPOWER CLASSIC</a></li> 
 
          <li><a href="../current/third-level.php">MPOWER GOLD</a></li> 
 
          <li><a href="../current/third-level.php">MPOWER PLATINUM</a></li> 
 
         </ul> 
 
        </li> 
 
        <li class="nav-parents"> 
 
         <div class="link"> <span class="plus">+</span> <span class="minus">-</span> <a href="#">OUR SEGMENTS</a></div> 
 
        </li> 
 
       </ul> 
 
      </div>

+0

我认为这只是一个例子,他可能有菜单没有子菜单,没有最后。 –

1

你如果因为当你运行该声明并没有做很多在这里:

$('.nav-parents').find('.plus, .minus').css('display', 'none'); 

它只会选择所有.nav-parents一次隐藏自己的长处和短处。

要无子菜单中选择只有NAV-父母,你应该使用这个jQuery代码:

$('.nav-parents').not(':has(.submenu)') 

这里是一个片段工作代码:

$(window).load(function(e) { 
 
    $('.nav-parents') 
 
     .not(':has(.submenu)') 
 
     .find('.plus, .minus') 
 
     .hide(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="multitoggle"> 
 
    <ul id="accordions"> 
 
    <li class="nav-parents"> 
 
     <div class="link"> 
 
     <span class="plus">+</span> 
 
     <span class="minus">-</span> 
 
     <a href="#">CURRENT ACCOUNTS</a> 
 
     </div> 
 
     <ul class="submenu"> 
 
     <li> 
 
      <a href="../current/third-level.php">MPOWER CLASSIC</a> 
 
     </li> 
 
     <li> 
 
      <a href="../current/third-level.php">MPOWER GOLD</a> 
 
     </li> 
 
     <li> 
 
      <a href="../current/third-level.php">MPOWER PLATINUM</a> 
 
     </li> 
 
     </ul> 
 
    </li> 
 
    <li class="nav-parents"> 
 
     <div class="link"> 
 
     <span class="plus">+</span> 
 
     <span class="minus">-</span> 
 
     <a href="#">OUR SEGMENTS</a> 
 
     </div> 
 
    </li> 
 
    </ul> 
 
</div>

相关问题