2016-06-29 1 views
0

あらすじ複数の.htmlページを使用してクリックされた各ナビゲーションリンクに.currentクラスを動的に追加/削除する方法はありますか?

私は動的にクリックされた各メニューリンクに.currentクラスを追加するサンプル・ヘッダーナビゲーションを作成しようとしています。私は複数の.htmlページでJavaScriptおよび/またはjQueryでこれを達成しようとしています。

既知のバグが今

に見て.currentクラスは、リンクがクリックされたときに、単に簡潔に点滅しますが、すぐに削除されます。

ナビゲーションリンクがクリックされたログメッセージはコンソールに残っていません。現在、短時間点滅してすぐに削除されます。

は、それが動的などのMVCのようなものやフレームワークを使用して複数の.htmlページを使用してクリックされたか、私はオフに 良いだろう、各リンク に.currentクラスを追加/削除することは可能です

質問angular.js?

閉じるボディータグの直前の ページの下部にjQueryリファレンススクリプトを置く方がよいでしょうか?

マイヘッダーナビゲーション見て、このようなサンプルプロジェクト:

<nav> 
    <ul id="headerNav"> 
    <li> 
     <a id="home" class="headerLink" href="index.html">Home</a> 
    </li> 
    <li> 
     <a id="about" class="headerLink" href="about.html">About</a> 
    </li> 
    </ul> 
</nav> 

マイscript.jsファイルは次のようになります。

/*jslint browser: true*/ 
/*global document, window, $, jQuery, alert, console, require, logger*/ 

$(document).ready(function() { 
    'use strict'; 
    console.log("dom is ready!"); 
    initHeaderNavLinks(); 
}); 

function initHeaderNavLinks() { 
    console.log("initializing header nav links..."); 

    // add current class to first link in header navigation 
    $('#headerNav li:first a').addClass("current"); 
} 

$('.headerLink').click(function() { 
    var clickedId = $(this).attr('id'); 
    var msg = ""; 
    msg = "clickedId: " + clickedId; 
    console.log(msg); 
    $(this).addClass('current'); 
}); 

ここはPlunkerのサンプルプロジェクトです。興味があるものについては https://plnkr.co:443/pVPDBfjmhqaIwnMEtMgm

UPDATE

、私は私の現在のニーズに最も適した、私のコードを簡素化するソリューションを見つけました。スクリプトタグの各ページにcurrentPageID変数を直接埋め込むことにしました。

更新プロジェクト

追加した各ページの先頭

<script> 
    var currentPageID = "about"; 
</script> 

にこのスクリプトタグマイヘッダーナビゲーションは、次のようになります。

<nav> 
    <ul> 
    <li> 
     <a id="home" href="index.html">Home</a> 
    </li> 
    <li> 
     <a id="about" href="about.html">About</a> 
    </li> 
    </ul> 
</nav> 

マイscript.jsファイルのルックスをこのような。あなたは、私がHTML5のデータ-何に.dataset.whateverで、値を保持する属性を使用します(この場合、ページに書き込むことができない場合はここで

/*jslint browser: true*/ 
/*global document, window, $, jQuery, alert, console, require, logger*/ 

$(document).ready(function() { 
    'use strict'; 
    console.log("dom is ready!"); 
    console.log("currentPageID: " + currentPageID); 

    $("#" + currentPageID).addClass('current'); 
}); 

は私の更新Plunkerプロジェクトhttps://plnkr.co/pVPDBfjmhqaIwnMEtMgm

+4

別のページのユーザーをナビゲートしている 'a'タグをクリックしているときにページが更新されていて、' script'がリセットされています – Rayon

+2

@Rayonが言ったことと戦うために、 'localStorage'を使ってナビゲーションボタンそれはクリックされ、ページが読み込まれたときに取得されます。これには信頼性の高い作業が必要ですが、それはうまくいくはずです。もう1つの方法は、現在のページのコンテナに 'html'ページを動的に読み込むことです。 – Adjit

+0

これはAdjitと同じことだとは分かりませんが、セッション変数を使用して、どのリンクが 'current'クラスを持つかを保持できます。最初のページの読み込み時に設定し、読み込んだときに各ページを参照させます。 –

答えて

1

あなたは現在のページから離れているので、何らかの形で永続性を持たせる必要があります。

セッションストレージ、ローカルストレージ、Cookieの間にはいくつかのオプションがあります。

クッキーは、ウェブページの永続性のための古き良き方法であり、一般にほとんどのブラウザでサポートされています。

セッション記憶域は、現在のセッションの情報のみを格納します。ユーザーがウィンドウを閉じると、このストレージはクリアされます。あなたのシナリオにはおそらく最も実用的です。

一方、ローカルストレージでは、セッションストレージと同じ機能がありますが、ローカルストレージ内の項目を明示的に削除するか、キャッシュをクリアする必要があります。

1

です検索する)。 あなたの行うことができることはあなたのURLに "#"アンカーを使用してから、それをjavascriptで取得することです。 そして、個人的なクライアント設定のための古くて頑丈な方法は、必ずクッキーを使用することです。

関連する問題