2016-10-04 37 views
-1

我無法找到如何動態更改我的啓動導航欄上的class =「active」(下面的html代碼)。我想知道是不是每個頁面重新輸入所有<nav>...</nav>代碼會更好,並且每個<li>項目單獨鍵入class =「active」,或者創建一個單獨的navbar.html文件並將其包括在每個文件,然後添加一個腳本或PHP代碼來改變它? (我不知道如何)。動態更改「活動」類或向每個頁面添加導航欄?

而且一般來說,這兩種方法哪種更好?

代碼:

<nav class="navbar navbar-inverse"> 
    <div class="container-fluid"> 
    <div class="navbar-header"> 
     <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar"> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     </button> 
     <a class="navbar-brand" href="#">Logo</a> 
    </div> 
    <div class="collapse navbar-collapse" id="myNavbar"> 
     <ul class="nav navbar-nav"> 
     <li class="active"><a href="#">Home</a></li> 
     <li><a href="#">About</a></li> 
     <li><a href="#">Projects</a></li> 
     <li><a href="#">Contact</a></li> 
     </ul> 
     <ul class="nav navbar-nav navbar-right"> 
     <li><a href="#"><span class="glyphicon glyphicon-log-in"></span> Login</a></li> 
     </ul> 
    </div> 
    </div> 
</nav> 
+2

Duplicate - http://stackoverflow.com/questions/35427641/how-to-dynamically-set-the-active-class-in-bootstrap-navbar?rq=1 –

+0

這不是一個重複,也有辦法Stack Exchange中的許多線程關於如何做到這一點,一些PHP和一些JS,並沒有他們爲我的代碼工作。 我也問過哪個更好:將導航欄複製到每個頁面,或單獨,這不會出現在其他線程上 – comparter

+2

然後它徵求意見,並肯定**脫離主題** –

回答

-1

其更好地與腳本或PHP代碼把它列入。根據URL後綴您可以編寫腳本來更改活動的李

+0

問題是我已經閱讀了關於它的所有Stack Exchange線程,以及一些PHP和一些使用JS/JQuery的帖子,但它們不起作用。也許你可以幫助特定的一個? Ty – comparter

0

變遷類動態

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

這一個使用jQuery我的jsp頁面爲我工作,所做的更改考慮您的代碼

,你可以嘗試這個

+0

這沒有奏效,但我認爲我的工作存在問題: 我創建了一個navbar.php文件,複製所有導航內容,然後保存。 在每個頁面(主頁,聯繫人等)上,我都包含navbar.php正文下面的第一行。另外,我使用上面的代碼創建了一個current.js文件,並在每個頁面上放置了思考腳本的鏈接。仍然無法正常工作 – comparter

+0

編輯:甚至當我用腳本標記在每個頁面中複製上面的代碼 – comparter

+0

在此函數中寫入警報並檢查它是否正在執行 –

0
PageOne.html 
<body> 
<header id="Include"> 
</header> 
<section class="sectionOne"> 
    <h1>This is Page one</h1> 
</section> 
</body> 

PageTwo.html 
<body> 
<header id="Include"> 
</header> 
<section class="sectionOne"> 
    <h1>This is Page two</h1> 
</section> 
</body> 

Header.html 
<nav class="navbar navbar-default"> 
    <div class="container-fluid"> 
    <!-- Brand and toggle get grouped for better mobile display --> 
    <div class="navbar-header"> 
     <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> 
     <span class="sr-only">Toggle navigation</span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     </button> 
     <a class="navbar-brand" href="#">Brand</a> 
    </div> 

    <!-- Collect the nav links, forms, and other content for toggling --> 
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> 
     <ul class="nav navbar-nav"> 
     <li class="active"><a href="index.html">page one</a></li> 
     <li><a href="pagetwo.html">page two</a></li> 
     </ul> 
    </div><!-- /.navbar-collapse --> 
    </div><!-- /.container-fluid --> 
</nav> 

App.js 
    $('#Include').load('header.html', function(){ 
     var Murl = location.pathname; 
//Murl gets the pathname from addressbar 
     var ActiveUrl = Murl.slice(1, Murl.length); 
     $('.navbar-nav li').removeClass('active'); 
//ThisURL gets all the href from navbar 
     var ThisURL = $('.navbar-nav li a').attr('href'); 
     if(ThisURL = ActiveUrl){ 
      $('.navbar-nav li a[href="'+ ThisURL +'"]').parent().addClass('active'); 
     } 
    }); 

希望這可以解決您的問題。我只使用jQuery。