代码之家  ›  专栏  ›  技术社区  ›  Anna_B

jQuery:嵌套的“数据目标”函数

  •  0
  • Anna_B  · 技术社区  · 4 年前

    这是我的代码:

    $("ul li").click(function() {
      var target = $($(this).data("target"));
      $(".hidden").not(target).removeClass("show");
      target.toggleClass("show");
    })
    * {
      cursor: default;
    }
    
    li {
      cursor: pointer;
    }
    
    .hidden {
      display: none;
    }
    
    .show {
      display: block;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <ul>
      <li data-target=".one">Link One</li>
      <li data-target=".two">Link Two</li>
      <li data-target=".three">Link Three</li>
    </ul>
    
    <div class="hidden one">
      Lorem Ipsum One
    </div>
    
    <ul class="hidden two">
      <li data-target=".two_one">Link Two One</li>
      <li data-target=".two_two">Link Two Two</li>
    </ul>
    
    <div class="hidden two_one">
      Lorem Ipsum Two One
    </div>
    
    <div class="hidden two_two">
      Lorem Ipsum Two Two
    </div>
    
    <div class="hidden three">
      Lorem Ipsum One
    </div>

    但是: 如果您单击“Link Two”,然后单击“Link Two One”或“Link Two Two”,第一个导航应该仍然可见。“链接二一”或“链接二-二”的内容应添加在该项下。如果点击“Link One”或“Link Three”,则“Link twone”和“Link Two Two”的内容将被折叠(当然“Two”导航也会再次隐藏)。

    怎么可能做到呢?我将非常感谢你的帮助!:)

    1 回复  |  直到 4 年前
        1
  •  1
  •   CertainPerformance    4 年前

    一种选择是使用 .not(this.closest('ul')) ul

    $("ul li").click(function() {
      var target = $($(this).data("target"));
      $(".hidden").not(target).not(this.closest('ul')).removeClass("show");
      target.toggleClass("show");
    })
    * {
      cursor: default;
    }
    
    li {
      cursor: pointer;
    }
    
    .hidden {
      display: none;
    }
    
    .show {
      display: block;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <ul>
      <li data-target=".one">Link One</li>
      <li data-target=".two">Link Two</li>
      <li data-target=".three">Link Three</li>
    </ul>
    
    <div class="hidden one">
      Lorem Ipsum One
    </div>
    
    <ul class="hidden two">
      <li data-target=".two_one">Link Two One</li>
      <li data-target=".two_two">Link Two Two</li>
    </ul>
    
    <div class="hidden two_one">
      Lorem Ipsum Two One
    </div>
    
    <div class="hidden two_two">
      Lorem Ipsum Two Two
    </div>
    
    <div class="hidden three">
      Lorem Ipsum One
    </div>