2016-09-17 4 views
0

に同様の質問が既に回答されているが、私は自分のコードでそれらを実装するトラブルを抱えている:機能は、現在

Add active class to current page navigation link

​​

jQuery active link current page

基本的には、アンカータグがユーザーが現在のページと一致する場合、クラスをアンカータグに追加する方法を理解しようとしています。私は3つのhtmlページを持っています - Index、About、Contact。彼らはすべて同じナビゲーションバーを持っています。

----------------------------------- Index.html -------- -------------------------------------------------- ------------

<nav class="navbar navbar-inverse navbar-fixed-top"><!-- navbar begings --> 
    <div class="container"> 
     <div class="navbar-header"> 
      <button aria-expanded="false" class="navbar-toggle collapsed" data-target="#bs-nav-demo" data-toggle="collapse" type="button"> 
       <span class="sr-only">Toggle navigation</span> 
      </button> 
      <a class="navbar-brand" href="http://vetamuse.com">Manuel Stoilov</a> 
     </div> 

     <div class="collapse navbar-collapse"> 
      <ul class="nav navbar-nav navbar-right"> 
       <li><a class="navAnchor" href="about.html">About |</a></li> 
       <li><a class="navAnchor" href="contact.html">Contact |</a></li> 
      </ul> 
     </div> 
    </div> 
</nav> 

------------------------------- ---- About.html ------------------------------------------- ---------------------------

<nav class="navbar navbar-inverse navbar-fixed-top"><!-- navbar begings --> 
    <div class="container"> 
     <div class="navbar-header"> 
      <button aria-expanded="false" class="navbar-toggle collapsed" data-target="#bs-nav-demo" data-toggle="collapse" type="button"> 
       <span class="sr-only">Toggle navigation</span> 
      </button> 
      <a class="navbar-brand" href="http://vetamuse.com">Manuel Stoilov</a> 
     </div> 

     <div class="collapse navbar-collapse"> 
      <ul class="nav navbar-nav navbar-right"> 
       <li><a class="navAnchor" href="about.html">About |</a></li> 
       <li><a class="navAnchor" href="contact.html">Contact |</a></li> 
      </ul> 
     </div> 
    </div> 
</nav> 

---------------- ------------------- Contact.html ---------------------------- ------------------------------------------

<nav class="navbar navbar-inverse navbar-fixed-top"><!-- navbar begings --> 
    <div class="container"> 
     <div class="navbar-header"> 
      <button aria-expanded="false" class="navbar-toggle collapsed" data-target="#bs-nav-demo" data-toggle="collapse" type="button"> 
       <span class="sr-only">Toggle navigation</span> 
      </button> 
      <a class="navbar-brand" href="http://vetamuse.com">Manuel Stoilov</a> 
     </div> 

     <div class="collapse navbar-collapse"> 
      <ul class="nav navbar-nav navbar-right"> 
       <li><a class="navAnchor" href="about.html">About |</a></li> 
       <li><a class="navAnchor" href="contact.html">Contact |</a></li> 
      </ul> 
     </div> 
    </div> 
</nav> 

私のCSSでは、私の.navAnchorsはsyledです。また、ユーザーが現在いるページと一致するクラス.currentをアンカータグに追加します。

---------------------------------- index.css --------- --------------------------

.navbar-collapse > .nav > li > a:link, 
    .navbar-collapse > .nav > li > a:visited 
{ 
    color: #95a1aa; 
    font-size: 15px; 
} 

.current { 
    color: pink; 
} 

私は現在、JavaScriptでこの機能をしようとしているが、それは働いていない:

------------------------ index.js --------------------- - ページの

var path = window.location.pathname.split("/").pop(); 
var link = $(".navAnchor"); 

window.setInterval(function(){ 
    for(var i = 0; i < 2; i++) { //2 refers to the number of links on nav page (about and contact) 
    if(path === link.eq(i).attr('href')){ 
     link.eq(i).addClass("current"); 
    } 
    } 
}, 5000); 

のリンクは以下のとおりです。 (index.htmlを)https://preview.c9users.io/manistoi/vetamuse/vetamuse/v3/index.html?_c9_id=livepreview8&_c9_host=https://ide.c9.io

(about.html)https://preview.c9users.io/manistoi/vetamuse/vetamuse/v3/about.html

(contact.html)https://preview.c9users.io/manistoi/vetamuse/vetamuse/v3/contact.html すべてのヘルプまたはチップが理解されます!

-------------------------------------- EDIT ------- --------------------------------------

私のために働く(私のJavaScriptのタブ)あなたは現在のクラスがliになりたい

$(document).ready(function(){ 
    var path = window.location.pathname.split("/").pop(); 

    $(".navAnchor").each(function(){ 
    if($(this).attr('href') == path){ 
     $(this).css("color", "black"); 
     $(this).css("font-weight", "bold"); 
    } 
    }) 
}) 
+0

あなたの問題は、問題を診断することは困難になるだろうより多くの情報(すなわち、[MCVE])なしで、あなたの 'link'変数が設定されている場合に起因することができます。 – Tibrogargan

+0

それは幾分助けになります。このような問題は、DOMがロードされる前に変数を設定することによって引き起こされる可能性があります。また、それが要因かどうかを判断するのに十分なコンテキストがありませんでした。外部サイトへのリンクも問題を引き起こす可能性がありますので、問題を再現するのに十分な状況を含める方がよいでしょう。 3ページすべてが本当に必要というわけではありませんでした。 – Tibrogargan

+0

質問の「編集」部分に記載されているコードが機能している場合、その質問は何ですか?与えられたコードが回答の場合は、質問に答えを加えないでください。代わりに、必要に応じて別の回答として追加します。 –

答えて

1

- ないa。あなたのナビリンクを反復して、hrefをチェックし、パス変数と一致するかどうかを確認する - 現在のクラスをaの親(li)に追加する。しかし、あなたがCurrentクラスをaにしたければ、コード内にparent()を入れておけばうまくいくはずです。また、大文字で表記されたページがありますが、あなたのHFSは小文字であることに注意してください。例えば:About.html vs about.html。これらは同じ場合にする必要があります。

$(document).ready(function(){ 
    var path = window.location.pathname.split("/").pop(); 

    $(".navAnchor").each(function(){ 
    if($this).attr('href') == path){ 
     $(this).parent().addClass('current'); 
    } 
    }) 
}) 
+0

ご協力ありがとうございます!あなたのテキストに間違っているのは、私の編集を見逃してしまったということです。私のクラスは機能しませんでしたので、代わりに.css()を使ってスタイリングしました。[編集]をご覧ください。 –

+1

うれしいあなたの編集がうまくいきましたが、CSSルールをクラスに追加して要素に追加することをお勧めします。 のスタイリングに固執しているように見えますが、その要素にダイレクトスタイリングを適用するよりも常にクラスを適用する方が良いです。 – gavgrif

関連する問題