2016-10-04 317 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。