2017-09-15 217 views
2

我在很多網站上衝浪,發現了一種在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

您的代碼不工作,你可以張貼在[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

好的請投票 –