2017-09-15 96 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

好的请投票 –