2016-07-28 8 views
0

アクティブなメニュー項目に「アクティブ」クラスを追加したいと思います。javascript url(メニューとサブメニュー)の2つの部分に一致する正規表現

そうのように正常に動作します:

var url = window.location.pathname; 
urlRegExp = new RegExp(url.replace(/\/$/,'') + "$"); 

$('.menu li a').each(function(){ 
     var hreflink = $(this).attr("href"); 

     if(urlRegExp.test(this.href.replace(/\/$/,''))){ 
      $(this).parent().addClass('active'); 
     } 
}); 

私もそのページの子のリンクのリストで、2ページ目のメニュー(サブメニューが、メインメニューの近くに位置していない)を持っています、と私はまた、サブメニューに、「アクティブ」クラスを追加したいと思います(ただし、同時にメインメニュー)だから、基本的には例えば

、私はこのページの上にいる時:

www.website.com/shops/cds 
  • 私はサブメニュー内に「CDS」(LI項目)で

アクティブクラスを追加したいメインメニュー(LI項目)

  • 中に、「お店」のアクティブクラスを追加します上記の正規表現はメインメニューのいずれかでしか動作しません。サブページ(子ページ)上にある場合は、サブメニューでは動作しますが、同時に両方では動作しません。

    誰かお手伝いできますか? ;-)

    事前に感謝します!

    種類は、私はすべての私のJS Regexingためhttp://www.regexr.com/というサイトを使用 ベン

  • +2

    あなたは '得るために' location.pathname'の使用について考えたことがあります/ stores/cds'して '/'で分割するだけですか? – NTL

    +0

    注:strictモードを使用すると、 'urlRegExp'は暗黙的なグローバル変数であることがわかります。前の行の末尾にカンマの代わりにセミコロンがあることが考えられます。 – gcampbell

    答えて

    1

    について。

    この正規表現は、あなたのコンポーネントを取得します。ここでは

    /\/(([a-z])+)/ig 
    

    はあなたのためのサンプルプログラムです:

    var url = 'www.website.com/shops/cds' 
     
    var reg = /\/(([a-z])+)/ig 
     
    
     
    var test = $('#test') 
     
    
     
    var match = reg.exec(url); 
     
    while (match != null) { 
     
        test.append('<div>' + match[1] + '</div>') 
     
        match = reg.exec(url); 
     
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
     
    <div> 
     
        Test for: www.website.com/shops/cds 
     
    </div> 
     
    <div id="test"> 
     
        
     
    </div>

    +0

    ありがとう! :-) –

    +0

    私が今見ているのは、私がルートページにいるとき、すべてのメニュー項目がアクティブになります。 :-) 例: http://www.website.com(すべてのメニューアイコンがアクティブになります) –

    +0

    おっと、ごめんなさい。今あなたの質問を読んでいるので、現在のページがルートである場合は特別なケースを追加する必要があるかもしれないと思うかもしれませんし、 "/"はREGEXと常に一致するからです。私は "if/else"を追加する方が簡単だと思います。 –

    関連する問題