タブの切り替えカスタマイズについて
-
https://irohacross.net/2015/02/jquery_tab.html
こちらのサイトを参考に、同コードを記入し、jsを読み込ましてるのですが、
別ページから指定のタブを開いてのアクセスは出来るのですが、同ページ(フッターメニューからになります)から、指定のタブを開いて、その箇所へアクセスが出来ません。直接WORDPRESSとは関係ないかもしれませんが、ご教授いただけると助かります。
よろしくお願いいたします。
-
こんにちは
タブを選択する処理はロード時のみ実行されるので、リロードが発生しないので、タブが選択されないのだと思います。クリック時にも処理をするといいかと思います。
$('〇〇〇').on('click', 'a', function() { var tabname = ($(this).attr('href').match(/#(tab\d+$)/) || [])[1]; if (!tabname) { tabname = "tab1"; } (省略) })
いつも、ありがとうございます!
ちょうどリロードかな?と思っていたところでした。//ダイレクトリンク
$(function() {
//location.hashで#以下を取得 変数hashに格納
var hash = location.hash;
//hashの中に#tab~が存在するか調べる。
hash = (hash.match(/^#tab\d+$/) || [])[0];//hashに要素が存在する場合、hashで取得した文字列(#tab2,#tab3等)から#より後を取得(tab2,tab3)
if($(hash).length){
var tabname = hash.slice(1) ;
} else{
// 要素が存在しなければtabnameにtab1を代入する
var tabname = “tab1”;}
//コンテンツを一度すべて非表示にし、
$(‘.content_area’).css(‘display’,’none’);//一度タブについているクラスselectを消し、
$(‘.tab_area li’).removeClass(‘select’);var tabno = $(‘ul.tab_area li#’ + tabname).index();
//クリックされたタブと同じ順番のコンテンツを表示します。
$(‘.content_area’).eq(tabno).fadeIn();//クリックされたタブのみにクラスselectをつけます。
$(‘ul.tab_area li’).eq(tabno).addClass(‘select’)
});上記リンク先のコードの具体的にどこへ挟み込めばよろしいでしょうか?
あと〇〇〇の箇所へ入る文字列がわからないのですが。お手数おかけし、申し訳ございません。
どこへ挟み込めばよろしいでしょうか?
どこでもいいですよ。たとえば、最後の }); の直前とか・・・。
あと〇〇〇の箇所へ入る文字列がわからないのですが。
対象のリンクを絞るためのセレクターです。下記のようにするのもいいかもです。
$('a').on('click', function() { var tabname = ($(this).attr('href').match(/#(tab\d+$)/) || [])[1]; if (!tabname) { return; } (省略) })
//ダイレクトリンク
$(function() {
//location.hashで#以下を取得 変数hashに格納
var hash = location.hash;
//hashの中に#tab~が存在するか調べる。
hash = (hash.match(/^#tab\d+$/) || [])[0];//hashに要素が存在する場合、hashで取得した文字列(#tab2,#tab3等)から#より後を取得(tab2,tab3)
if($(hash).length){
var tabname = hash.slice(1) ;
} else{
// 要素が存在しなければtabnameにtab1を代入する
var tabname = “tab1”;}
//コンテンツを一度すべて非表示にし、
$(‘.content_area’).css(‘display’,’none’);//一度タブについているクラスselectを消し、
$(‘.tab_area li’).removeClass(‘select’);var tabno = $(‘ul.tab_area li#’ + tabname).index();
//クリックされたタブと同じ順番のコンテンツを表示します。
$(‘.content_area’).eq(tabno).fadeIn();//クリックされたタブのみにクラスselectをつけます。
$(‘ul.tab_area li’).eq(tabno).addClass(‘select’)$(‘a’).on(‘click’, function() {
var tabname = ($(this).attr(‘href’).match(/#(tab\d+$)/) || [])[1];
if (!tabname) {
return;
}});
こういう感じで足してみたのですが、別ページからのタブ選択が効かなくなりました。
同ページからのタブ選択も変化なしですね。
同ページからはリロードでうまくいくはずなのですが。サンプルコードの (省略) 部分は、タブを選択するコード(「//コンテンツを一度すべて非表示にし」以降のコード)を記述してください。
また、最後の }) が抜けています。※ このフォーラムでコードを貼り付ける場合は、コードを選択し [code] ボタンをクリック(逆クォートで囲む)してください。
https://wpdocs.osdn.jp/フォーラムへようこそ#.E3.82.B3.E3.83.BC.E3.83.89.E3.81.AE.E6.8A.95.E7.A8.BFロード時のコードと冗長しますが、下記のような感じです。処理を関数化するといいかと思います。
$('a').on('click', function() { var tabname = ($(this).attr('href').match(/#(tab\d+$)/) || [])[1]; if (!tabname) { return; } //コンテンツを一度すべて非表示にし、 $('.content_area').css('display','none'); //一度タブについているクラスselectを消し、 $('.tab_area li').removeClass('select'); var tabno = $('ul.tab_area li#' + tabname).index(); //クリックされたタブと同じ順番のコンテンツを表示します。 $('.content_area').eq(tabno).fadeIn(); //クリックされたタブのみにクラスselectをつけます。 $('ul.tab_area li').eq(tabno).addClass('select'); })
//ダイレクトリンク $(function() { //location.hashで#以下を取得 変数hashに格納 var hash = location.hash; //hashの中に#tab~が存在するか調べる。 hash = (hash.match(/^#tab\d+$/) || [])[0]; //hashに要素が存在する場合、hashで取得した文字列(#tab2,#tab3等)から#より後を取得(tab2,tab3) if($(hash).length){ var tabname = hash.slice(1) ; } else{ // 要素が存在しなければtabnameにtab1を代入する var tabname = "tab1";} //コンテンツを一度すべて非表示にし、 $('.content_area').css('display','none'); //一度タブについているクラスselectを消し、 $('.tab_area li').removeClass('select'); var tabno = $('ul.tab_area li#' + tabname).index(); //クリックされたタブと同じ順番のコンテンツを表示します。 $('.content_area').eq(tabno).fadeIn(); //クリックされたタブのみにクラスselectをつけます。 $('ul.tab_area li').eq(tabno).addClass('select') $('a').on('click', function() { var tabname = ($(this).attr('href').match(/#(tab\d+$)/) || [])[1]; if (!tabname) { return; } //コンテンツを一度すべて非表示にし、 $('.content_area').css('display','none'); //一度タブについているクラスselectを消し、 $('.tab_area li').removeClass('select'); var tabno = $('ul.tab_area li#' + tabname).index(); //クリックされたタブと同じ順番のコンテンツを表示します。 $('.content_area').eq(tabno).fadeIn(); //クリックされたタブのみにクラスselectをつけます。 $('ul.tab_area li').eq(tabno).addClass('select') }) }); $(function() { //クリックしたときのファンクションをまとめて指定 $('ul.tab_area li').click(function() { //.index()を使いクリックされたタブが何番目かを調べ、 // indexという変数に代入します。 var index = $('ul.tab_area li').index(this); //コンテンツを一度すべて非表示にし、 $('.content_area').css('display','none'); //クリックされたタブと同じ順番のコンテンツを表示します。 $('.content_area').eq(index).fadeIn(); //タブについているクラスselectを消し、 $('.tab_area li').removeClass('select'); //クリックされたタブのみにクラスselectをつけます。 $(this).addClass('select') }); });
上記コードでうまく動作いたしました!ありがとうございます。
このトピでのコード記載の際のルール、よく知らなかったもので、失礼いたしました。
以後気をつけます。上記コードで動作は問題ないので、いいのですが、
参考サイトの$(function() { //クリックしたときのファンクションをまとめて指定 $('ul.tab_area li').click(function() { //.index()を使いクリックされたタブが何番目かを調べ、 // indexという変数に代入します。 var index = $('ul.tab_area li').index(this); //コンテンツを一度すべて非表示にし、 $('.content_area').css('display','none'); //クリックされたタブと同じ順番のコンテンツを表示します。 $('.content_area').eq(index).fadeIn(); //タブについているクラスselectを消し、 $('.tab_area li').removeClass('select'); //クリックされたタブのみにクラスselectをつけます。 $(this).addClass('select') }); });
これも入れないとタブが切り替わらないので、入れないといけないのですよね?
なんか二重に入れているような気がしまして。あと、ヘッダーを固定にしているもので、ページ内アンカーするとヘッダーで隠れてしまうので、
下記コードで余白を持たせております。
別ページからはうまくヘッダーの高さ分、ずれて表示してくれるのですが、同ページからですと、
余白が入らないようです。これの対処は出来るものなのでしょうか??余白コード
jQuery( window ).on( 'load', function() { id = location.hash; speed = 0; headerHight = 200; // 固定ヘッダーの高さ if ( '' != id ) { pos = jQuery( id ).offset().top - headerHight; jQuery( 'html' ).animate({ scrollTop: pos }, speed ); } });
クリックイベント内に記述するといいかと思います。
あとは、JavaScript について質問できる他のフォーラムなどで聞かれた方がいいかと思います。
- トピック「タブの切り替えカスタマイズについて」には新たに返信することはできません。