【问题标题】:Add a plus/minus sign to a jQuery menu将加号/减号添加到 jQuery 菜单
【发布时间】:2018-11-15 17:27:19
【问题描述】:

我为一个简单的菜单开发了以下代码:

$(document).ready(function () {
    $(".main_menu_01, .main_menu_02").on('click', function () {
    
    var $panel = $(this).next('.panel');
    if ($panel.is(':visible')) {
      $panel.add($panel.find('.panel')).slideUp(500).removeClass('active');
    } else {
      $panel.slideDown(500).addClass('active');
    }
    
    });
});
.panel{ 
 width: 100%;
 padding-left: 0%;
 font-weight: bold;
 overflow: hidden;
 display:none;
}

.main_menu_01 {
 padding-left: 1%;
 background: blue;
}

.main_menu_02 {
 padding-left: 5%;
 background: lime;
}

.sub_menu_01{
 padding-left: 1%;
 background: lime;
}

.sub_menu_02{
 padding-left: 10%;
 background: lime;
}


.main_menu_01:before, .main_menu_02:before {
 content:'+';
 width:20px;
 display:inline-block;
}

.main_menu_01.active:before, .main_menu_02.active:before {
 content:'-';
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<li class="main_menu_01"> 1.0 Main Menu </li>
  <ul class="panel">
								
    <li class="sub_menu_01"> 1.1 Sub Menu </li>
					
    <li class="main_menu_02"> 1.2 Sub Menu </li>
      <ul class="panel">
		
      <li class="sub_menu_02"> <a> 1.2.1 Sub Menu </a> </li>
      <li class="sub_menu_02"> <a> 1.2.2 Sub Menu </a> </li>	

      </ul>	
			
  </ul>

到目前为止,这一切都很好。您也可以在 JSFiddle here 中找到代码。


如您所见,我想在 main_menu 按钮上添加 +- 符号,具体取决于菜单是否打开。因此,我尝试使用CSS 中的before 代码。然而,目前+ 符号仍然存在,尽管菜单已打开。

我不确定这个问题是否是由jQuery 代码引起的。但是,我需要这个 jQuery 代码来关闭/打开整个菜单,以防点击按钮 main_menue_01

您知道我需要在我的代码中更改什么,以便我可以使用jQuery 代码和+/- 符号提供的完整功能吗?

【问题讨论】:

  • 如果您在浏览器的检查器中查看不断变化的类属性,您会注意到接收active 类(&lt;ul&gt;)的元素与您拥有的元素不同将您的 +/- 附加到 (&lt;li&gt;)。
  • 为活动/非活动创建单独的类,以处理 +/- 并在您的 if 中添加/删除这些类。

标签: jquery html css


【解决方案1】:

您需要在横幅上设置active 类,即点击发生的位置。从那里您可以根据状态更改样式,例如

$(document).ready(function () {
    $(".main_menu_01, .main_menu_02").on('click', function () {
      var $panel = $(this).next('.panel');
      if ($panel.is(':visible')) {
        $panel.add($panel.find('.panel')).slideUp(500);
        $(this).hasClass('main_menu_01') ? $('.menu').removeClass('active') : $(this).removeClass('active');
      } else {
        $panel.slideDown(500);
        $(this).addClass('active');
      }
    });
});
.panel{ 
 width: 100%;
 padding-left: 0%;
 font-weight: bold;
 overflow: hidden;
 display:none;
}

.main_menu_01 {
 padding-left: 1%;
 background: blue;
}

.main_menu_02 {
 padding-left: 5%;
 background: lime;
}

.sub_menu_01{
 padding-left: 1%;
 background: lime;
}

.sub_menu_02{
 padding-left: 10%;
 background: lime;
}

 .main_menu_01:before, .main_menu_02:before {
 content:'+';
 width:20px;
 display:inline-block;
}

.main_menu_01.active:before, .main_menu_02.active:before {
 content:'-';
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<li class="menu main_menu_01"> 1.0 Main Menu </li>
  <ul class="panel">
								
    <li class="sub_menu_01"> 1.1 Sub Menu </li>
					
    <li class="menu main_menu_02"> 1.2 Sub Menu </li>
      <ul class="panel">
        <li class="sub_menu_02"> <a> 1.2.1 Sub Menu </a> </li>
        <li class="sub_menu_02"> <a> 1.2.2 Sub Menu </a> </li>	
      </ul>	
  </ul>

【讨论】:

  • 您好缟玛瑙,感谢您的回答,但它只能部分起作用。如果您打开 main_menu_01 和 main_menu_02,然后单击 main_menu_01 关闭所有菜单,然后单击 main_menu_01 再次打开菜单,则 main_menu_02 将带有 - 符号,但应该是 + 符号。
  • @Michi,我更新了,所以如果你关闭 main_menu_01 它不会关闭内部的。
  • 对不起,如果我之前的评论不是很清楚,但关闭和打开菜单的功能完全按照我之前想要的方式工作。只有 +/- 符号无法正常工作。我需要的是:如果您关闭 main_menu_01,我希望内部菜单也关闭,并且内部菜单的 + 符号更改为 - 符号。
  • 不错。正是我需要的。如果你支持我的问题会很酷。
  • 我还在这里更新了 JSfiddle:jsfiddle.net/ogbn8x6v/3。关于使用多个类的指南可以在这里找到:stackoverflow.com/questions/17366432/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多