2012-05-06 19 views
7

Quiero poder determinar en qué página está el usuario actualmente. un indicador simple en la forma de agregar estilo único al enlace de navegación el usuario está viendo actualmente su contextosimple jQuery addClass() no parece estar funcionando

aquí está mi script, todos los selectores funcionan bien, si la declaración también hace el trabajo, pero la función addClass() no hace nada .. aquí está mi código:

<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:

tengo que trabajar, este es mi código finaly, hay una necesidad de cualquier realizando alguna mejora?

$(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

creé un caso de prueba con la secuencia de comandos y funciona bien. –

Respuesta

3

Assign 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> 

A continuación, intente:

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"); 
     } 
    }); 

Si no puede cambiar el código HTML a continuación, tratar como siguiente:

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

que funciona jajaja, no veo ninguna diferencia con la mía excepto 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

¿Puede explicarme qué ocurre con mi codificación? – michel9501

+0

Esta es una mejora de su script, y si ha definido bien su selector 'activo' en su CSS, esto funcionaría como un hechizo. –

+0

Esto no parece funcionar para mí tampoco, definí bien la clase 'activa' (si agrega manualmente una clase = 'activa' puedo ver los cambios) – michel9501

3

Probablemente es que la clase activa se debe aplicar a la li .. Asumiendo que su lógica es correcta y la clase debe ser aplicado a la li (difícil de decir sin el HTML y CSS):

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

Tengo la intención de aplicar la clase al ancla .. Añadiré html y css al mensaje principal pronto – michel9501

+0

He actualizado el código HTML, CSS no es necesario en este momento porque el problema es que la clase no se agrega en el html código si está definido – michel9501

+0

Aquí hay un jsfiddle que agrega la clase al anclaje .http: // jsfiddle.net/lúcuma/DHABK/ – lucuma

0

No estoy seguro consigo la cuestión en absoluto, pero Me gustaría algo como:

$("#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> 

es un trabajo uso de este script cuando se utiliza un archivo externo para el menú

como index.php inclide menu.php se debe utilizar este scritp tu detectar url cargado y menú de Cambio de clase a clase activa.

gracias u thecodeparadox su código es un trabajo

Cuestiones relacionadas