【问题标题】:Toggle multiple classes切换多个类
【发布时间】:2015-02-21 11:43:08
【问题描述】:

我遇到了一个我想添加到我的网站的菜单。 我的工作分支在:

  1. 商业
  2. 时尚
  3. 音乐
  4. 肖像

所以我有一个像上面这样的菜单。 当我点击一个部分时,假设“商业”我希望所有其他部分都显示:无。

看看这个 FIDDLE:http://jsfiddle.net/bfevLsj2/8/

$(document).ready(function() {
    $("#commercial").click(function() {
        $(".commercial").toggleClass("show");
        $(".fashion").toggleClass("hid");
        $(".music").toggleClass("hid");
        $(".portrait").toggleClass("hid");
    });
});

【问题讨论】:

  • 你的小提琴工作正常,有什么问题?
  • @Kartikeya 对我来说工作不正常。如果我点击链接,一切都搞砸了:)

标签: javascript jquery css


【解决方案1】:

你需要siblings()宽度jquery

说明:获取匹配元素集中每个元素的兄弟姐妹,可选地由选择器过滤。

$("[id]").click(function(){ //onclick on element with ID
    var selected = $(this).attr("id"); // save the value of that ID
    $("."+ selected).show().siblings("[class]").hide()//find the class with the same value as class and show it then find all siblings class and hide them 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div id="commercial"><a href="#">Commercial</a></div>
<div id="fashion"><a href="#">Fashion</a></div>
<div id="music"><a href="#">Music</a></div> 
<div id="portrait"><a href="#">Portrait</a></div><br />

<div class="commercial">C</div>
<div class="fashion">F</div>
<div class="music">M</div>
<div class="portrait">P</div>

但是更好的方法是使用data-*

$("[data-tab]").click(function(){
  var current = $(this).attr("data-tab");
  $("[data-content="+ current +"]").show().siblings("[data-content]").hide();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div data-tab="commercial"><a href="#">Commercial</a></div>
<div data-tab="fashion"><a href="#">Fashion</a></div>
<div data-tab="music"><a href="#">Music</a></div> 
<div data-tab="portrait"><a href="#">Portrait</a></div><br />

<div data-content="commercial">C</div>
<div data-content="fashion">F</div>
<div data-content="music">M</div>
<div data-content="portrait">P</div>

再次最好使用纯javascript

function runClick (event) {
    var current = this.getAttribute("data-tab");
    for( var content = 0; content < dataContent.length; content++) {
      dataContent[content].style.display = "none"
    }
    document.querySelector("[data-content="+ current + "]").style.display = "block"
}

var dataTabs    = document.querySelectorAll("div[data-tab]"),
    dataContent = document.querySelectorAll("div[data-content]");

for(var tab = 0; tab < dataTabs.length; tab++){
   dataTabs[tab].addEventListener("click", runClick , false);
}
<div data-tab="commercial"><a href="#">Commercial</a></div>
<div data-tab="fashion"><a href="#">Fashion</a></div>
<div data-tab="music"><a href="#">Music</a></div> 
<div data-tab="portrait"><a href="#">Portrait</a></div><br />

<div data-content="commercial">C</div>
<div data-content="fashion">F</div>
<div data-content="music">M</div>
<div data-content="portrait">P</div>

【讨论】:

    【解决方案2】:

    HTML:

    <div id="commercial" class="menuItem"><a href="#">Commercial</a></div>
    <div id="fashion" class="menuItem"><a href="#">Fashion</a></div>
    <div id="music" class="menuItem"><a href="#">Music</a></div>
    <div id="portrait" class="menuItem"><a href="#">Portrait</a></div><br />
    
    <div class="commercial content">C</div>
    <div class="fashion content">F</div>
    <div class="music content">M</div>
    <div class="portrait content">P</div>
    

    JavaScript:

    $(document).ready(function(){
        $(".menuItem").click(function(){
            var id = this.id;
            $('.content').removeClass('show').addClass('hid');
            $('.'+id).addClass('show').removeClass('hid');
        });
    });
    

    CSS:

    .hid {
        display:none;
    }
    .show {
        display:block;
    }
    

    Fiddle

    【讨论】:

      【解决方案3】:

      Have a look at this fiddle, think it's what you want

      基本上你可以使用 .toggle() 来遍历和显示/隐藏它是否是你想要显示的。

      $(function(){
          // find all the links that you can click
          $("div.clickable a").click(function(e) {
              // when they're clicked, find the identifier of 
              // the tab/div you want shown
              var clickedId = $(e.target).parent("div").attr("id");
                      
              // traverse all of the divs and show/hide according 
              // to whether it's the tab you want
              $("div.section").each(function(index, div) {
                  $(div).toggle($(div).hasClass(clickedId));
              });
          });
      }); 
      

      还有 HTML:

      <div id="commercial" class="clickable"><a href="#">Commercial</a></div>
      <div id="fashion" class="clickable"><a href="#">Fashion</a></div>
      <div id="music" class="clickable"><a href="#">Music</a></div>
      <div id="portrait" class="clickable"><a href="#">Portrait</a></div>
      <br />
      
      <div class="commercial section">C</div>
      <div class="fashion section">F</div>
      <div class="music section">M</div> 
      <div class="portrait section">P</div>
      

      HTH


      编辑在this fiddle中添加“ALL”链接

      $("div.clickable a").click(function(e) {
          // when they're clicked, find the identifier of 
          // the tab/div you want shown
          var clickedId = $(e.target).parent("div").attr("id");
                      
          // traverse all of the divs and show/hide according 
          // to whether it's the tab you want
          $("div.section").each(function(index, div) {
              $(div).toggle($(div).hasClass(clickedId) || clickedId=="ALL");
          });
      });
      

      将其添加到可点击 div 列表后:

      <div id="ALL" class="clickable">
          <a href="#">ALL</a>
      </div>
      

      【讨论】:

        【解决方案4】:

        你可以这样更简单:

        <div class="link" id="commercial"><a href="#">Commercial</a></div>
        <div class="link" id="fashion"><a href="#">Fashion</a></div>
        <div class="link" id="music"><a href="#">Music</a></div>
        <div class="link" id="portrait"><a href="#">Portrait</a></div><br />
        
        <div class="commercial elem">C</div>
        <div class="fashion elem">F</div>
        <div class="music elem">M</div>
        <div class="portrait elem">P</div>
        <script type="text/javascript">
            $(document).ready(function(){
                $(".link").click(function(){
                    var id = $(this).attr('id');
                    $('.elem').hide();
                    $('.' + id).show();
                });
            });
        
        </script>
        

        【讨论】:

        • 谢谢你们,它现在可以完美运行了!如果我想在菜单中添加 ALL 声音并单击它会再次显示所有项目怎么办?
        • 将修改我的答案以添加此内容! (轻而易举)
        猜你喜欢
        • 2015-03-03
        • 2020-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多