简体   繁体   English

从导航链接滚动到手风琴并打开它

[英]Scroll to accordion from a nav-link and open it

I have 4 bootstrap accordions all collapsed.我有 4 个自举手风琴都倒塌了。 When clicking from navigation link ([href="#headingTwo"] etc...] I need to expand that referenced accordion only. [ AND close it if clicked on another navigation link ]从导航链接单击时([href="#headingTwo"] 等...] 我只需要展开引用的手风琴。[如果单击另一个导航链接则关闭它]

So the below code works but I'm repeating it 4 times.... Surely it can be simplified into one function?所以下面的代码有效,但我重复了 4 次……它肯定可以简化为一个 function 吗?

// accordion 1
$('a.js-scroll-trigger[href="#headingTwo"]').on('click', function() {
  document.getElementById("collapseTwo").classList.add("show");
});

// accordion 2
$('a.js-scroll-trigger[href="#headingThree"]').on('click', function() {
  document.getElementById("collapseThree").classList.add("show");
});

// accordion 3
$[...]

// accordion 4
$[...]

Many thanks in advance.提前谢谢了。

It looks like your anchor share the same class .js-scroll-trigger , you could assign the click handler to all of them, within the handler you will get the target accordion item from the anchor's href , that it's the id of the accordion item, then you can just trigger the click handler of the item button like below.看起来你的锚点共享相同的 class .js-scroll-trigger ,你可以将点击处理程序分配给所有这些,在处理程序中你将从锚点的href获得目标手风琴项目,它是手风琴项目的id , 那么你就可以像下面这样触发项目按钮的click处理程序。

href contains the accordion header id , the element contains as it's first child a button that triggers the expand/collapse href包含 accordion header id ,该元素作为第一个子元素包含一个触发展开/折叠的button

<h2 class="accordion-header" id="headingOne">
  <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
    Accordion Item #1
  </button>
</h2>

 $(function() { $("a.js-scroll-trigger").on("click", function() { var target = $(this).attr("href"); $(target).find("button").trigger("click"); }); });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/js/bootstrap.min.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.0.2/css/bootstrap.min.css" rel="stylesheet" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div> <a href="#headingOne" class="js-scroll-trigger">Item 1</a> <a href="#headingTwo" class="js-scroll-trigger">Item 2</a> <a href="#headingThree" class="js-scroll-trigger">Item 3</a> </div> <br> <div class="accordion" id="accordionExample"> <div class="accordion-item"> <h2 class="accordion-header" id="headingOne"> <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne"> Accordion Item #1 </button> </h2> <div id="collapseOne" class="accordion-collapse collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample"> <div class="accordion-body"> <strong>This is the first item's accordion body.</strong> It is shown by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow. </div> </div> </div> <div class="accordion-item"> <h2 class="accordion-header" id="headingTwo"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo"> Accordion Item #2 </button> </h2> <div id="collapseTwo" class="accordion-collapse collapse" aria-labelledby="headingTwo" data-bs-parent="#accordionExample"> <div class="accordion-body"> <strong>This is the second item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow. </div> </div> </div> <div class="accordion-item"> <h2 class="accordion-header" id="headingThree"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree"> Accordion Item #3 </button> </h2> <div id="collapseThree" class="accordion-collapse collapse" aria-labelledby="headingThree" data-bs-parent="#accordionExample"> <div class="accordion-body"> <strong>This is the third item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow. </div> </div> </div> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM