2012-05-06 19 views
7

Desidero essere in grado di determinare su quale pagina l'utente è attualmente attivo. un semplice indicatore sotto forma di aggiungere uno stile unico al link di navigazione l'utente sta visualizzando il suo contestojQuery addClass() non sembra funzionare

ecco il mio script, tutti i selettori funzionano bene, se anche l'istruzione fa il lavoro, ma la funzione addClass() non fa nulla .. qui è il mio codice:

<script> 
$(document).ready(function(){ 
    var pathname = window.location.pathname; 
    $("#links ul li a").each(function() { 
     var href= $(this).attr("href"); 
     if (pathname.indexOf(href) >= 0){ 
      $(this).addClass("active"); 
     } 
    }); 
}); 
</script> 


    <nav id="links"> 
    <ul> 
     <li><a href="index.php">Home</a></li> 
     <li><a>About</a></li> 
     <li><a>Contact</a></li> 
    </ul> 
</nav> 

HTML:

preso a lavorare, questo è il mio codice finalmente, v'è la necessità di eventuali migliorie?

$(document).ready(function(){ 
    var pathname = window.location.pathname; 
    var onDomain=true; 
    $("#links ul li a").each(function() { 
     var href= $(this).attr("href"); 
     if (href != undefined && pathname.indexOf(href) >= 0){ 
      $(this).addClass("active"); 
      onDomain=false; 
     } 
    }); 
    if (onDomain){ 
     $("#links ul li:first-child a").addClass("active"); 
    } 
}); 
+1

Ho creato un test case con il tuo script e funziona perfettamente. –

risposta

3

Assegna href-a;

<nav id="links"> 
    <ul> 
     <li><a href="index.php">Home</a></li> 
     <li><a href="">About</a></li> 
     <li><a href="">Contact</a></li> 
    </ul> 
</nav> 

Quindi provare:

var pathname = window.location.pathname; 
    $("#links ul li a").each(function() { 
     var href= $(this).attr("href"); 
     if (href.length && pathname.indexOf(href) >= 0){ 
      $(this).addClass("active"); 
     } 
    }); 

Se non è possibile modificare il codice HTML quindi provare come segue:

var pathname = window.location.pathname; 
    $("#links ul li a").each(function() { 
     var href= $(this).attr("href"); 
     if (href != undefined && pathname.indexOf(href) >= 0){ 
      $(this).addClass("active"); 
     } 
    }); 
+0

che funziona lol, non vedo alcuna differenza dalla mia tranne la parte .. – michel9501

2
var loc = ''+($(location).attr('href').split('/').slice(-1)); 
if(typeof loc !== 'undefined'){ 
    $("#links li").find("a[href='"+loc+"']").each(function(){ 
     $(this).addClass("active"); 
    }); 
}else(typeof loc === 'undefined'){ 
    $("#links li a:eq(0)").addClass("active"); // if you use 'home' as your first. 
} 
+0

Puoi spiegarmi cosa c'è di sbagliato nella mia codifica? – michel9501

+0

Questo è un miglioramento del tuo script, e se hai ben definito il tuo selettore 'attivo' sul tuo CSS questo funzionerebbe come un incantesimo. –

+0

Anche per me non sembra funzionare, ho definito bene la classe 'attiva' (se si aggiunge una classe di menu = 'active' posso vedere le modifiche) – michel9501

3

E 'probabilmente che la classe attiva deve essere applicato il li .. Supponendo che la tua logica è corretta e la classe deve essere applicato il Li (difficile dire senza l'HTML e CSS):

if (pathname.indexOf(href) >= 0){ 
     $(this).parent().addClass("active"); 
} 
+0

Intendo applicare la classe all'ancora .. aggiungerò presto html e css al post principale – michel9501

+0

Ho aggiornato il codice HTML, al momento non è necessario css perché il problema è che la classe non è stata aggiunta nell'html codice se è definito – michel9501

+0

Ecco un jsfiddle che aggiunge la classe all'ancora..http: // jsfiddle.net/lucuma/DHABK/ – lucuma

0

io non sono sicuro di ottenere la questione a tutti, ma Vorrei andare per qualcosa del tipo:

$("#links ul li a").filter(function() { 
    return window.location.pathname.indexOf(this.href) != -1; 
}).addClass('active'); 
0
<script type="text/javascript"> 

$(window).load(function() { 
        var url = window.location; 
        $('#nav a').filter(function() { 
         return this.href == url; 
        }).parents("li").addClass('active'); 

      }); 
</script> 

è un lavoro uso questo script quando si utilizza file esterno per il menu

come index.php inclide menu.php è necessario utilizzare questo scritp tu rilevare url caricato e menù di classe modifica alla classe di attivi.

Grazie U thecodeparadox il tuo codice è lavoro