momojaja
@momojaja

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

別ページから、特定のタブが開いた状態でリンクさせたいです

解決したいこと

tab.htmlというページに3つのタブを設置しているとして、
A.htmlというページから、

tab-1
tab-2
tab-3
という3つのリンクを設けてそれぞれのリンク先を、tab.html内のそれぞれが表示されている状態にしたく、以下のようなソースを用意しました。

該当するソースコード

                    <div class="information-requirements c-tabs">
            <div class="information-requirements__list c-tabs-list">
              <div class="c-tabs__link current" data-id="#information-requirements-1"><span>tab-1</span></div>
              <div class="c-tabs__link" data-id="#information-requirements-2"><span>tab-2</span></div>
              <div class="c-tabs__link" data-id="#information-requirements-3"><span>tab-3</span></div>
            </div>

            <div id="information-requirements-1" class="c-tabs-content current">
                tab-1
            </div>

            <div id="information-requirements-2" class="c-tabs-content">
               tab-2
            </div>

            <div id="information-requirements-3" class="c-tabs-content">
                 tab-3
            </div>
          </div>


$(function () {
       //タブの実装
    $(".information-requirements .c-tabs__link").click(function () {
        var index = $(".information-requirements .c-tabs__link").index(this);
        $(".information-requirements .c-tabs__link, .information-requirements .c-tabs-content").removeClass("current");
        $(this).addClass("current");
        $(".information-requirements .c-tabs-content").eq(index).addClass("current");
    });
});

$(function () {
    //タブへダイレクトリンクの実装
    //リンクからハッシュを取得
    var hash = location.hash;
    hash = (hash.match(/^#information-requirements-\d+$/) || [])[0];
    //リンクにハッシュが入っていればtabnameに格納
    if ($(hash).length) {
        var tabname = hash.slice(1);
    } else {
        var tabname = "information-requirements-1";
    }
    //コンテンツ非表示・タブを非アクティブ
    $(".information-requirements .c-tabs__link").removeClass("current");
    $(".information-requirements .c-tabs-content").removeClass("current");
    //何番目のタブかを格納
    var tabno = $(".information-requirements .c-tabs-content#" + tabname).index();
    //コンテンツ表示
    $(".information-requirements .c-tabs-content").eq(tabno).addClass("current");
    //タブのアクティブ化
    $(".information-requirements .c-tabs__link").eq(tabno).addClass("current");
});


上記の様に設定し、
tab.htmlにアクセスすると、デフォルトでtab-3が開いた状態になり、
tab.html#tab-1
tab.html#tab-2
tab.html#tab-3
という風に外部にリンクを置いてもそれぞれのタブを開いた状態になりません。

厚かましいお願いかと存じますがどなたかご助力いただけませんでしょうか。
よろしくお願いいたします。

0

1Answer

tab.htmlにアクセスすると、デフォルトでtab-3が開いた状態になり、
tab.html#tab-1
tab.html#tab-2
tab.html#tab-3
という風に外部にリンクを置いてもそれぞれのタブを開いた状態になりません。

文でこう書いておきながら コードでは

hash = (hash.match(/^#information-requirements-\d+$/) || [])[0];

とありますが、付けるハッシュは #information-requirements-{n} 形式なのではないでしょうか?

1Like

Your answer might help someone💌