2016-12-22 11 views
0

私がやっていることは、現在のアクティブなページが別のスタイルであるレギュラーメニューです。jQueryでアクティブなメニュー項目を設定する

HTML(正常に動作し)(正常に動作し)

<div> 
    <ul class="nav">  
     <li> 
      <a class="active" href="#"> 
       <span>one</span> 
      </a> 
     </li> 

     <li> 
      <a href="#"> 
       <span>two</span> 
      </a> 
     </li> 

     <li> 
      <a href="#"> 
       <span>three</span> 
      </a> 
     </li> 
    </ul>  
</div> 

CSS

.nav .active { 
    color: #fff; 
    background-color: #000; 
} 

JS(動作しない)Sara Soueidan's Codepenから取ら

$('a').click(function(){ 
    $(this).addClass('active') 
     .siblings() 
     .removeClass('active'); 
}); 

Codepen

Sara Soueidanのバージョンは、codepenで複製することさえできません(aとliの両方を対象としています)。私が見つけたもう一つのバージョンは以下のJSを使用していました:

$('.nav li').click(function() { 
     $('.nav li').removeClass('active'); 
     $(this).addClass('active'); 
}); 

このバージョンでは動作しているように見えますが、私は私が3倍にする必要が理解していないいくつかの理由のために、両方のために、メニューボタンをクリックしてURLを使用しますアクティブなクラスを設定します。

誰もがこの恒常的な問題に少し光を当てることはできますか?

+0

トリプルクリックが必要な問題のデモを追加できます – guradio

答えて

4

問題:あなたが最初aタグからactiveクラスを削除してから追加する必要があります。はこのラインで$(this).addClass('active').siblings().removeClass('active');

で実際aへのsiblingsli

ソリューションの中にはありません〜$(this)

$('a.active').removeClass('active'); 
$(this).addClass('active'); 
+0

ありがとうございます。 \t \t $( 'li.active')。removeClass( 'active'); \t \t $(this).addClass( ')'のように動作しました。 active '); }); 'しかし、URLを変更してアクティブなクラスを設定するには、まだトリプルクリックする必要があります。私はそこにURL階層へのアクセス権がないので、私はcodepenでこれを複製することはできません。 –

+0

@JanCavel「トリプルチェック」という用語を理解していませんか? –

+0

私はページ 'ワン'にいます。私はページの 'two'ボタンをクリックすると、ブラウザはURLを変更しますが、2つの' li'のアクティブなクラスはまだ設定されていませんので、速くダブルクリックする必要があります。合計3回のクリック。 –

0

私は認めるよりも時間がかかり、メニューボタンを押すときに「li」のアクティブなクラスを設定する必要はないことを発見しましたが、現在のURLにその部分が含まれているかどうかを確認する必要がありましたメニューの

したがって、私はJSでのif-elseifを迅速-N-汚れをチェーン:URLは文字列 "1" を含んでいる場合

$(document).ready(function() { 
    if(window.location.href.indexOf("one") > -1) { 
     $('.nav-container ul li').eq(1).addClass("active"); 
    } else if(window.location.href.indexOf("two") > -1) { 
     $('.nav-container ul li').eq(2).addClass("active"); 
    } else $('.nav-container ul li').eq(0).addClass("active"); 
}); 

をテストするために、私が使用:

window.location.href.indexOf("one") > -1 

その後特定の「li」をeq(i)でターゲットにしました。ここでは、0からn-1のメニュー項目です。

最高の解決策ではありませんが、5項目以下のメニューでは機能します。また、「1」メニュー項目に「one-one」、「one-two」などの子供がある場合はうまく機能します。

関連する問題