2017-09-15 18 views
2

多くのWebサイトでサーフィンし、次の例のようにネストされたアコーディオンをHTMLに追加する方法を見つけました。HTMLネストされたアコーディオン

var acc = document.getElementsByClassName("accordion"); 
 
var i; 
 

 
for (i = 0; i < acc.length; i++) { 
 
acc[i].onclick = function() { 
 
    this.classList.toggle("active"); 
 
    var panel = this.nextElementSibling; 
 
    if (panel.style.maxHeight){ 
 
    panel.style.maxHeight = null; 
 
    } else { 
 
    panel.style.maxHeight = panel.scrollHeight + "5000px"; 
 
    } 
 
} 
 
}
<button class="accordion">Accordion 1</button> 
 
<div class="panel"> 
 
    <button class="accordion">Accordion 2</button> 
 
    <div class="panel"> 
 
     <button class="accordion">Accordion 3</button> 
 
     <div class="panel"> 
 
      <p> 
 
       <li>List 1</li> 
 
       <li>List 2</li> 
 
      </p> 
 
     </div> 
 
    </div> 
 
</div>
しかし、私は、ネストされたアコーディオンを追加するには、上記の方法を使用するときに我々は、すべてのアコーディオンを開くと、その後、最上位の1を折りたたみ、それが崩壊するではなく、内側のもの。

最も外側のものを折りたたむときにすべてのアコーディオンを崩壊させる方法があるかどうか教えてください。

+1

を支援しようと、あなたは[jsfiddle.net](https://jsfiddle.net)の例を投稿することができ – bhansa

答えて

2

それはあなたのコードが動作しない、完全な

$('.toggle').click(function(e) { 
 
    \t e.preventDefault(); 
 
    
 
    var $this = $(this); 
 
    
 
    if ($this.next().hasClass('show')) { 
 
     $this.next().removeClass('show'); 
 
     $this.next().slideUp(350); 
 
    } else { 
 
     $this.parent().parent().find('li .inner').removeClass('show'); 
 
     $this.parent().parent().find('li .inner').slideUp(350); 
 
     $this.next().toggleClass('show'); 
 
     $this.next().slideToggle(350); 
 
    } 
 
});
@import url('https://fonts.googleapis.com/css?family=Pacifico|Open+Sans:300,400,600'); 
 
* { 
 
    box-sizing: border-box; 
 
    font-family: 'Open Sans', sans-serif; 
 
    font-weight: 300; 
 
} 
 
a { 
 
    text-decoration: none; 
 
    color: inherit; 
 
} 
 
p { 
 
    font-size: 1.1em; 
 
    margin: 1em 0; 
 
} 
 
.description { 
 
    margin: 1em auto 2.25em; 
 
} 
 
body { 
 
    width: 40%; 
 
    min-width: 300px; 
 
    max-width: 400px; 
 
    margin: 1.5em auto; 
 
    color: #333; 
 
} 
 
h1 { 
 
    font-family: 'Pacifico', cursive; 
 
    font-weight: 400; 
 
    font-size: 2.5em; 
 
} 
 
ul { 
 
    list-style: none; 
 
    padding: 0; 
 
} 
 
ul .inner { 
 
    padding-left: 1em; 
 
    overflow: hidden; 
 
    display: none; 
 
} 
 
ul .inner.show { 
 
    /*display: block;*/ 
 
} 
 
ul li { 
 
    margin: .5em 0; 
 
} 
 
ul li a.toggle { 
 
    width: 100%; 
 
    display: block; 
 
    background: rgba(0, 0, 0, 0.78); 
 
    color: #fefefe; 
 
    padding: .75em; 
 
    border-radius: 0.15em; 
 
    transition: background .3s ease; 
 
} 
 
ul li a.toggle:hover { 
 
    background: rgba(0, 0, 0, 0.9); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 

 

 
<ul class="accordion"> 
 
    
 
    
 
    
 
    <li> 
 
    <a class="toggle" href="javascript:void(0);">Item 3</a> 
 
    <ul class="inner"> 
 
     <li> 
 
     <a href="#" class="toggle">Open Inner</a> 
 
     <div class="inner"> 
 
      <p> 
 
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tempus placerat fringilla. Duis a elit et dolor laoreet volutpat. Aliquam ultrices mauris id mattis imperdiet. Aenean cursus ultrices justo et varius. Suspendisse aliquam orci id dui dapibus 
 
      blandit. In hac habitasse platea dictumst. Sed risus velit, pellentesque eu enim ac, ultricies pretium felis. 
 
      </p> 
 
     </div> 
 
     </li> 
 
     
 
     <li> 
 
     <a href="#" class="toggle">Open Inner #2</a> 
 
     <div class="inner"> 
 
      <p> 
 
      Children will automatically close upon closing its parent. 
 
      </p> 
 
     </div> 
 
     </li> 
 
     
 
     <li>Option 3</li> 
 
    </ul> 
 
    </li> 
 
    
 
    <li> 
 
    <a class="toggle" href="javascript:void(0);">Item 4</a> 
 
    <ul class="inner"> 
 
     <li> 
 
     <a href="#" class="toggle">Technically any number of nested elements</a> 
 
     <ul class="inner"> 
 
      <li> 
 
      <a href="#" class="toggle">Another nested element</a> 
 
      <div class="inner"> 
 
       <p> 
 
       As long as the inner element has inner as one of its classes then it will be toggled. 
 
       </p> 
 
       <p> 
 
       Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tempus placerat fringilla. Duis a elit et dolor laoreet volutpat. Aliquam ultrices mauris id mattis imperdiet. Aenean cursus ultrices justo et varius. Suspendisse aliquam orci id dui dapibus 
 
       blandit. In hac habitasse platea dictumst. Sed risus velit, pellentesque eu enim ac, ultricies pretium felis. 
 
       </p> 
 
      </div> 
 
      </li> 
 
     </ul> 
 
     </li> 
 
     
 
     <li>Option 2</li> 
 
     
 
     <li>Option 3</li> 
 
    </ul> 
 
    </li> 
 
</ul>

+0

どうもありがとうSanjay Prajapati。それは本当に私が望む方法で動作します。 –

+0

okありがとうございます –

関連する問題