最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Link to anchor and open accordion - Stack Overflow

programmeradmin3浏览0评论

How do I open an accordion panel by using an external anchor link?

I've tried using an anchor link and it just loads the page, without opening the panel.

What I'm trying to achieve is that when the anchor link is clicked, the page loads, scroll to the panel and then open the accordion.

This link is the one that will anchor to the other page and should open the accordion:

 <a class="linkTo" href="/project#<?php the_sub_field('area_link'); ?>">

This is the code I am using to open the accordion on click:

 $(document).ready(function() {
   $(".accordion .accord-header").click(function() {
     // for active header definition
     $('.accord-header').removeClass('on');
     $(this).addClass('on');

     // accordion actions
     if($(this).next("div").is(":visible")){
       $(this).next("div").slideUp(600);
       $(this).removeClass('on');
     } else {
       $(".accordion .accord-content").slideUp(600);
       $(this).next("div").slideToggle(600);
     }
  });
});

This is the accordion structure:

<div class="accordion">
  <div class="accord-header" id="<?php the_sub_field('area_link'); ?>">Accordion 1</div>
    <div class="accord-content">
        <!-- Content -->
    </div>
  </div>
</div>

How do I open an accordion panel by using an external anchor link?

I've tried using an anchor link and it just loads the page, without opening the panel.

What I'm trying to achieve is that when the anchor link is clicked, the page loads, scroll to the panel and then open the accordion.

This link is the one that will anchor to the other page and should open the accordion:

 <a class="linkTo" href="/project#<?php the_sub_field('area_link'); ?>">

This is the code I am using to open the accordion on click:

 $(document).ready(function() {
   $(".accordion .accord-header").click(function() {
     // for active header definition
     $('.accord-header').removeClass('on');
     $(this).addClass('on');

     // accordion actions
     if($(this).next("div").is(":visible")){
       $(this).next("div").slideUp(600);
       $(this).removeClass('on');
     } else {
       $(".accordion .accord-content").slideUp(600);
       $(this).next("div").slideToggle(600);
     }
  });
});

This is the accordion structure:

<div class="accordion">
  <div class="accord-header" id="<?php the_sub_field('area_link'); ?>">Accordion 1</div>
    <div class="accord-content">
        <!-- Content -->
    </div>
  </div>
</div>
Share Improve this question edited Mar 8, 2018 at 11:28 Marco asked Mar 8, 2018 at 10:22 MarcoMarco 972 gold badges3 silver badges11 bronze badges 6
  • Possible duplicate of open accordion panel from external anchor link – Yannick Huber Commented Mar 8, 2018 at 10:28
  • You can check window.location value on page-load, to decide whether to open that accordion or not. – Alex Yokisama Commented Mar 8, 2018 at 10:31
  • @Yannjoel I read that, but it's not the same, they are using jQueryUI – Marco Commented Mar 8, 2018 at 10:32
  • What do you mean @AlexYokisama – Marco Commented Mar 8, 2018 at 10:32
  • This answer should still be able to solve your problem stackoverflow./a/43743091/6886695 – Yannick Huber Commented Mar 8, 2018 at 10:34
 |  Show 1 more ment

2 Answers 2

Reset to default 2

You can use window.location.hash on document ready to initialize your accordion.

$(function () {
    var $accordionSecion = $(window.location.hash);
    if ($accordionSecion.length) {
       $(window).scrollTop($accordionSecion.offset().top);
       $accordionSecion.addClass('on');
    }
});

You can probably use same handler with onhashschange listener to handle click on accordion titles.

Good luck. :)

$(document).ready(function(){
 var hash = window.location.hash;
 if (hash) {
   var element = $(hash);
   if (element.length) {
   element.trigger('click');
 }
 }
});

try above code on the page where you want to open the accordion.

发布评论

评论列表(0)

  1. 暂无评论