J'ai un problème.
Je veux ajouter la classe "active" dans le menu des éléments lorsque la page relative est activée.
le menu est très simple:
<div class="menu">
<ul>
<li><a href="~/link1/">LINK 1</a>
<li><a href="~/link2/">LINK 2</a>
<li><a href="~/link3/">LINK 3</a>
</ul>
</div>
Dans jQuery, je dois vérifier si l’URL est www.xyz.com/other/link1/
si c'est celui-ci, j'aimerais ajouter un élément de classe un l'élément 'a' de link1.
J'essaye beaucoup de solutions mais rien ne marche.
Cliquez ici pour une solution en jsFiddle
Ce dont vous avez besoin, c’est d’obtenir window.location.pathname comme indiqué, puis de créer une expression rationnelle à partir de celle-ci et de le tester à l’aide des symboles de navigation.
$(function(){
var url = window.location.pathname,
urlRegExp = new RegExp(url.replace(/\/$/,'') + "$"); // create regexp to match current url pathname and remove trailing slash if present as it could collide with the link in navigation in case trailing slash wasn't present there
// now grab every link from the navigation
$('.menu a').each(function(){
// and test its normalized href against the url pathname regexp
if(urlRegExp.test(this.href.replace(/\/$/,''))){
$(this).addClass('active');
}
});
});
Un moyen plus facile pour moi était:
var activeurl = window.location;
$('a[href="'+activeurl+'"]').parent('li').addClass('active');
parce que mes liens vont à l'URL absolue, mais si vos liens sont relatifs, vous pouvez utiliser:
window.location**.pathname**
Récupérez les éléments, parcourez, vérifiez le HREF:
$('.menu').find('a').each(function() {
if($(this).attr('href').indexOf('www.xyz.com/other/link1/')>0) {
$(this).addClass('active');
}
})
Aucune autre méthode "addClass" n'a fonctionné pour moi lors de l'ajout d'une classe à un élément 'a' du menu sauf celui-ci:
$(function () {
var url = window.location.pathname,
urlRegExp = new RegExp(url.replace(/\/$/, '') + "$");
$('a').each(function () {
if (urlRegExp.test(this.href.replace(/\/$/, ''))) {
$(this).addClass('active');
}
});
});
Cela m'a pris quatre heures pour le trouver.
La réponse de Wasim quelques messages plus haut fonctionne comme annoncé:
Vérifiez ceci celaFONCTIONNE
Html
<div class="menu">
<ul>
<li><a href="~/link1/">LINK 1</a>
<li><a href="www.xyz.com/other/link1">LINK 2</a>
<li><a href="~/link3/">LINK 3</a>
</ul>
</div>
Jquery
$(document).ready(function(){
$(".menu ul li a").each(function(){
if($(this).attr("href")=="www.xyz.com/other/link1")
$(this).addClass("active");
})
})
window.location.href
vous donnera l'URL actuelle (comme indiqué dans l'adresse du navigateur). Après l'analyse et l'extraction de la partie pertinente, comparez-la avec chaque lien href et affectez la classe active
au lien correspondant.
Utilisez window.location.pathname et comparez-le avec vos liens. Vous pouvez faire quelque chose comme ça:
$('a[href="~/' + currentSiteVar + '/"').addClass('active');
Mais vous devez d’abord préparer currentSiteVar pour le mettre en sélecteur.
J'imagine que vous essayez de mélanger du code Asp et du code JS et que, à un moment donné, cela rompt ou n'excuse pas correctement les appels de liaison.
Peut-être pourriez-vous utiliser un délégué à la place. Cela réduira la complexité de savoir quand lier l'événement click.
Un exemple serait:
$('body').delegate('.menu li','click',function(){
var $li = $(this);
var shouldAddClass = $li.find('a[href^="www.xyz.com/link1"]').length != 0;
if(shouldAddClass){
$li.addClass('active');
}
});
Pour voir si cela aide, il utilise l'attribut Attribute Starts With Selector de jQuery.
Chi
En configurant le menu actif, ils ont les nombreuses façons de le faire. Maintenant, je vous partage un moyen de définir le menu actif par CSS.
<a href="index.php?id=home">Home</a>
<a href="index.php?id=news">News</a>
<a href="index.php?id=about">About</a>
Maintenant, vous ne définissez que $_request["id"] == "home"
puis echo "class='active'"
, nous pouvons alors faire la même chose avec les autres.
<a href="index.php?id=home" <?php if($_REQUEST["id"]=="home"){echo "class='active'";}?>>Home</a>
<a href="index.php?id=news" <?php if($_REQUEST["id"]=="news"){echo "class='active'";}?>>News</a>
<a href="index.php?id=about" <?php if($_REQUEST["id"]=="about"){echo "class='active'";}?>>About</a>
Je pense que c'est utile avec vous.
$(function() {
var pgurl = window.location.href.substr(window.location.href.lastIndexOf("/")+1);
$(".nav li").each(function(){
if($('a',this).attr("href") == pgurl || $('a', this).attr("href") == '' )
$(this).addClass("active");
})
});
<script type="text/javascript">
jQuery(document).ready(function($) {
var url = window.location.pathname,
urlRegExp = new RegExp(url.replace(/\/$/,'') + "$");
$("#navbar li a").each(function() {//alert('dsfgsdgfd');
if(urlRegExp.test(this.href.replace(/\/$/,''))){
$(this).addClass("active");}
});
});
</script>
Cela fonctionne pour moi, fondamentalement, la navigation est la même
<div id="main-menu">
<ul>
<li><a href="<?php echo base_url();?>shop">SHOP</a>
<li><a href="<?php echo base_url();?>events">EVENTS</a>
<li><a href="<?php echo base_url();?>services">SERVICES</a>
</ul>
</div>
Disons que vous êtes à l'URL: http: // localhost/nom_projet/shop/detail_shop/
Et vous voulez que le lien "SHOP" devienne "actif" afin que vous puissiez indiquer visuellement qu'il s'agit de la navigation active, même si vous vous trouvez dans la sous-page de "boutique" de "detail_shop".
Le javascript:
var path = window.location.pathname;
var str = path.split("/");
var url = document.location.protocol + "//" + document.location.hostname + "/" + str[1] + "/" + str[2];
$('#main-menu a[href="' + url + '"]').parent('li').addClass('active');
Essentiellement, cela fera correspondre les liens de l'attribut nav dont le préfixe href commence par "shop" (ou quel que soit le répertoire secondaire).
ça marche pour moi: D
function setActive() {
aObj = document.getElementById('menu').getElementsByTagName('a');
for(i=0;i<aObj.length;i++) {
if(document.location.href.indexOf(aObj[i].href)>=0) {
var activeurl = window.location;
$('a[href="'+activeurl+'"]').parent('li').addClass('active');
}
}
}
window.onload = setActive;