Quelle est la méthode standard pour rendre le lien actif dans une barre de navigation Twitter Bootstrap en gras? Il est clair qu'un lien gagne l'apparence active en gagnant la classe "active". Par exemple, le lien Home
ci-dessous est actif. Lorsque je clique sur un lien de la barre de navigation, jQuery doit-il supprimer toutes les classes des éléments li
, puis ajouter la classe active
au lien que j'ai identifié?
<ul class="nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
</ul>
EDIT: j'ai inclus
<script type="text/javascript">
$('.nav li a').on('click', function() {
alert('clicked');
$(this).parent().parent().find('.active').removeClass('active');
$(this).parent().addClass('active');
});
</script>
après les liens. L'alerte apparaît lorsque je clique sur un lien, mais la classe "active" n'est pas ajoutée au lien.
Voici tout mon HTML de barre de navigation:
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="#">AuctionBase</a>
<div class="nav-collapse">
<ul class="nav">
<li><a href="home.php">Search</a></li>
<li><a href="about.php">About</a></li>
</ul>
</div>
</div>
</div>
</div>
Vous devez vous assurer de définir la classe active dans le cadre de la réponse à la demande (lors du chargement de la page) et non avant, par exemple lorsque l'utilisateur clique sur un lien pour demander une page différente.
Vous devez d’abord déterminer quelle navlink
doit être définie comme active, puis ajouter la classe active au <li>
. Le code ressemblerait à quelque chose comme ça
Testé par le demandeur :
HTML dans un fichier php
Appeler une fonction php en ligne dans le balisage <li>
en transmettant la requête de destination des liens uri
<ul class="nav">
<li <?=echoActiveClassIfRequestMatches("home")?>>
<a href="home.php">Search</a></li>
<li <?=echoActiveClassIfRequestMatches("about")?>>
<a href="about.php">About</a></li>
</ul>
PHP fonction
La fonction php simple a besoin de comparer la requête passée en URI et si elle correspond à la page en cours de rendu, sortie active class
<?php
function echoActiveClassIfRequestMatches($requestUri)
{
$current_file_name = basename($_SERVER['REQUEST_URI'], ".php");
if ($current_file_name == $requestUri)
echo 'class="active"';
}
?>
http://totalprogus.blogspot.sk/2013/12/bootstrap-add-active-class-to-li.html
Ce tutoriel a une excellente solution pour ce "problème". Je m'occupais de cela il y a un moment et je travaillais très bien pour moi, personnalisable aussi.
$(document).ready(function() {
$('a[href="' + this.location.pathname + '"]').parent().addClass('active');
});
Si vous ne voulez pas traiter avec le côté serveur et dans le cas où tous les hrefs sont simples, comme '/page.php', vous pouvez appeler
$('.your-nav-container').find('a[href="' + location.pathname + '"]').parents('li').addClass('active');
après le chargement de la page.
Tu peux essayer:
$('.nav li a').on('click', function() {
$(this).parent().parent().find('.active').removeClass('active');
$(this).parent().addClass('active').css('font-weight', 'bold');
});
Toutefois, il serait préférable d'attribuer à votre nav
un attribut id
, car vous pouvez avoir plus d'un navigateur sur une page avec la classe nav
.
$('#main-nav li a').on('click', function() {
$(this).parent().parent().find('.active').removeClass('active');
$(this).parent().addClass('active').css('font-weight', 'bold');
});
Alternativement, au lieu d'utiliser .css('font-weight', 'bold')
, vous pouvez simplement mettre ceci dans la feuille de style:
.active {
font-weight: bold;
}
Ajoutez le script suivant au bas de la page:
<script>
$(document).ready(function() {
var url = this.location.pathname;
var filename = url.substring(url.lastIndexOf('/')+1);
$('a[href="' + filename + '"]').parent().addClass('active');
});
</script>
Chris Moutray votre réponse m'a beaucoup aidé dans le développement de mon logiciel (j'utilise ZendFramework). J'ai écrit cette vue assistant:
<?php
class Zend_View_Helper_ActiveOrNot {
function activeOrNot ( $requestUri ) {
$current_file_name = basename($_SERVER['REQUEST_URI'], ".php");
if ($current_file_name == $requestUri)
echo 'class="active"';
}
}
Dans ce cas, j'appelle cette aide dans la vue ainsi:
<?php $this -> activeOrNot ( "public" );
Merci!!
Vous pouvez le résoudre avec CSS.
Ajoutez une classe au corps de chaque page:
<body class="home">
Ou si vous êtes sur la page de contact:
<body class="contact">
Ensuite, prenez ceci en considération lorsque vous créez vos styles:
ul li:hover, body.home a.home, body.contact a.contact { background-color: #000; }
ul li:hover a, body.home li.home a, body.contact li.contact a { color: #fff; }
Enfin, appliquez les noms de classe à vos éléments de liste:
<ul>
<li class="home"><a href="index.php">Home</a></li>
<li class="contact"><a href="contact.php">Contact Us</a></li>
<li class="about"><a href="about.php">About Us</a></li>
</ul>
Ce point, chaque fois que vous êtes sur la page body.home, votre lien.home un lien aura un style par défaut indiquant qu'il s'agit de la page en cours.
Si vous assignez le nom de la page à $ pageTitle, vous pouvez le faire sans JavaScript.
<ul class="nav navbar-nav">
<li <?php if ($pageTitle == "Website Development") {echo 'class="active"';} ?>>
<a href="website-development.php">
Web Development
</a>
</li>...</ul>
Il suffit de mettre le code ci-dessous dans la section "head".
<script type="text/javascript">
$(document).ready(function () {
$("li a[href='" + location.href.substring(location.href.lastIndexOf("/") + 1, 255) + "']").addClass("active");
});
</script>
Évidemment, n'oubliez pas votre appel à jquery.js avant.
Et ton:
<style>
.active{something...}
</style>