質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

750閲覧

【jQuery】他ページからのタブ切り替え

sabanomisoni

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2021/02/27 14:02

前提・実現したいこと

他のページから該当のタブのリンクに飛んできた際に
該当のタブが切り替わるようにしたいです。
タブ切り替え自体に使用しているのはtabsletになります。
https://vdw.github.io/Tabslet/

JavaScript・jQueryは初心者なため、解決にご助力いただけますと幸いです。

該当のソースコード

【html】 <div class="tab__wrap"> <div class="tabs tab__container"> <ul class="horizontal"> <li class="tab__item"><a href="#tab-1">タブ1</a></li> <li class="tab__item"><a href="#tab-2">タブ2</a></li> <li class="tab__item"><a href="#tab-3">タブ3</a></li> </ul> <div class="tab__content" id="tab-1"> <div class="tab__desc"> <p class="c-txtsp">テキストテキストテキストテキストテキストテキスト</p> </div> </div> <div class="tab__content" id="tab-2"> <div class="tab__desc"> <p class="c-txtsp">テキストテキストテキストテキストテキストテキスト</p> </div> </div> <div class="tab__content" id="tab-3"> <div class="tab__desc"> <p class="c-txtsp">テキストテキストテキストテキストテキストテキスト</p> </div> </div> </div> </div>

試したこと

下記、参考サイト(https://techmemo.biz/javascript/tab-direct-link/)を元に記述しています。

【JavaScript】 var hash = location.hash; hash = (hash.match(/^#tab-\d+$/) || [])[0]; if($(hash).length){ var tabname = hash.slice(1) ; } else{ var tabname = "tab-1"; } $('.tab__content').hide(); $('.tab__item').removeClass('active'); var tabno = $('.tab__item#' + tabname).index(); $('.tab__content').eq(tabno).fadeIn(); $('.tab__item').eq(tabno).addClass('active');

発生している問題・エラーメッセージ

現時点で、デベロッパーツールのconsoleを確認してもエラーは確認できませんでしたが
tab-3のみ、他のページから飛んできた際に機能しています。
何も指定していない場合はtab-1がactiveになっています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

修正箇所

まず、こうすれば取りあえず動くはずの修正案をお伝えします。

html

sabanomisoniさんのコード

HTML

1<li class="tab__item"><a href="#tab-1">タブ1</a></li> 2<li class="tab__item"><a href="#tab-2">タブ2</a></li> 3<li class="tab__item"><a href="#tab-3">タブ3</a></li>

修正コード(classを付与)

HTML

1<li class="tab__item tab-1"><a href="#tab-1">タブ1</a></li> 2<li class="tab__item tab-2"><a href="#tab-2">タブ2</a></li> 3<li class="tab__item tab-3"><a href="#tab-3">タブ3</a></li>

Javascript

sabanomisoniさんのコード

Javascript

1var tabno = $('.tab__item#' + tabname).index();

修正コード(jQuery.index()の適正な使用)

Javascript

1var tabno = $('.tab__item').index($(`.tab__item.${tabname}`));

解説

sabanomisoniさんのコードで動かない原因は主に2つ挙げられると思います。

  • jQueryに渡しているセレクタが誤っている
  • jQuery.index()メソッドを正しく使えていない

セレクタに関しては、$('.tab__item#' + tabname)の部分になります。
リスト部分の要素を指しているのだと思いますが、li直下のaに付与されている#idではなく単にhref属性に渡している値なので、記載のセレクタではヒットしません。
また、仮にaid=tab-1のように付与していたとしても、$('.tab__item #' + tabname)のように、.tab-item#tab-1の間に半角スペースを1つ開けておく必要があります。

また、jQuery.index()メソッドを正しく使えていないようです。
これは本来下記のように用います。
$('複数の要素を指すセレクタ').index('←のうち、index番号を取得したい特定のセレクタ')
sabanomisoniさんのコードで見ると、下記のように使ってしまっているように見えます。
$('index番号を取得したい特定のセレクタ').index()

上記を踏まえて、お伝えしている修正後のコードではjQuery.index()を本来の用法通りに使った上で、index()にわたす引数にliそれぞれのユニークなセレクタを渡すためにタブ番号を表すclassをそれぞれ付与しています。

なにか不明な点や私の方で勘違いしている点などあればお伝え下さい。
以上ご確認をよろしくおねがいします!

投稿2021/03/13 08:09

marasonPD

総合スコア168

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問