JavaScriptについての質問です。ページ移行せずにタブで切り替えるページを作っています。まずは現在のコードが以下です。

■js
jQuery(function() {
var pages = jQuery('.section');
pages.hide();
if ( location.hash ) {
jQuery('html,body').scrollTop(0);
jQuery(location.hash).fadeIn();
} else {
pages.eq(0).fadeIn();
}
jQuery('.tab a').click(function(event){
event.preventDefault();
var nextPage = this.hash;
pages.hide();
jQuery(nextPage).fadeIn();
});
});
■HTML
<ul class="tab">
<li><a href="aaa#home"></li>
<li><a href="aaa#contact"></li>
</ul>
<div id="home" class="section"></div>
<div id="contact" class="section"></div>

現在の仕様としましては、
・タブをクリックしてもURLに#○○がつかない
・外部から直接 URL#○○にアクセスできる
となっていますが、要望としては、
・タブをクリックしてもURLに#○○がつかない(同じ)
・タブをクリックした際に、タブにクラス(current)を付ける
・外部から直接 URL#○○にアクセスできるが、URL表示には#○○がつかない
になります。
最後のURL表示については、そもそも無理な可能性があるのでスルーしていただいて、タブのクラス付けだけでも回答いただきたいと思います。どうぞよろしくお願いします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2014/12/18 19:00:49
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント300pt

こんな感じでどうでしょう。

jQuery(function() {
    var pages = jQuery('.section');
    var target = location.hash;
    pages.hide();
    if ( target ) {
        jQuery('html,body').scrollTop(0);
        jQuery(target).fadeIn();
//      location.hash = "";      ★ハッシュ消しても、中途半端 (´・ω・`)
        jQuery('.tab li a[href="'+ target + '"]').attr("class", "current");
    } else {
        pages.eq(0).fadeIn();
        jQuery('.tab li a').eq(0).attr("class", "current");
    }
    jQuery('.tab a').click(function(event){
        event.preventDefault();
        jQuery('.tab li a').attr("class", "");
        jQuery(this).attr("class", "current");
        var nextPage = this.hash;
        pages.hide();
        jQuery(nextPage).fadeIn();
    });
});

URL の # が残っちゃいますが、これを消すと home に飛んじゃいます...

HTML は、こんな感じ。

<ul class="tab">
<li><a href="#home">home</a></li>
<li><a href="#contact">contact</a></li>
<li><a href="#etc">etc</a></li>
</ul>
<div id="home" class="section">home</div>
<div id="contact" class="section">contact</div>
<div id="etc" class="section">etc</div>

<style>
.current {
    background-color: pink;
}
</style>

jsFiddle で試してみたのが、こちらです(ハッシュ付きで呼び出したときの動作が確認できませんが)。
http://jsfiddle.net/1e6g2qrt/

他2件のコメントを見る
id:a-kuma3

上記コードのクラス付けだけのバージョンを教えていただければ幸いです。

余計なこと、しなきゃよかったですね ><。

        location.hash = "";

の行を削除すれば、クラスの付け替えだけになります。
回答のコードも修正しておきました。

2014/12/18 18:10:14
id:dekapurio

いえいえ、ありがとうございました。

ちなみに見よう見まねで以下を試してみて、うまくいったように見えたんですが、やはり#以降が消えた時点でページの一番上へいってしまいました。
jQuery(window).load(function(){
location.hash = "";
});

他も色々と試してみたいと思います。
有難うございました。

2014/12/18 19:00:08

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません