自我。活动菜单项

时间:2011-06-30 09:07:28

标签: jquery jquery-selectors

我有以下脚本:

(function($) {
    $.fn.MenuAutoActive = function() {

        var menus = $('ul li a');
        //menus.removeClass('active');

        var matches = menus.filter(function() {
            return document.location.href.indexOf($(this).attr('href')) >= 0;
        });

        matches.addClass('active');
    };

id做什么:

  • 循环遍历所有ul> li列表搜索'a'
  • 检查'a'是否为'href'
  • 如果href =当前网址,则会向其添加class'active'

我遇到的唯一问题是它只能看到href的最后一位:

例如:主菜单将是:

<ul>
    <li><a href="index.html"></a></li>
    <li><a href="Services/index.html"></a></li>
    <li><a href="Portfolio/index.html"></a></li>
    <li><a href="Conact/index.html"></a></li>
</ul>

网址= http://www.website.com/Services/

在这种情况下,脚本不会标记<a href="Services/index.html"></a>,因为URL不包含index.html。

如何查看URL的最后一个(最后一个/之后)和最后一个位(最后一个/之前)?

非常感谢任何帮助!

皮特

3 个答案:

答案 0 :(得分:1)

这应该有效:

return document.location.href.indexOf(this.href) >= 0;

请注意,这会访问DOM元素的href 属性。这将返回绝对URL。

因此this.href会为您http://www.website.com/index.html而不仅仅index.html

答案 1 :(得分:0)

尝试替换

document.location.href.indexOf($(this).attr('href')) >0

通过

document.location.toString().indexOf($(this).attr('href')) >0

答案 2 :(得分:0)

var bits=$(this).attr('href').split('/');
var thelastbit=bits.pop(); 
var thepenultimatebit=bits.pop(); // previous call removed the last bit

如果您没有首先将index.html放在链接中,或者在询问时将其删除,那么可能会更快

return document.location.href.indexOf($(this).attr('href').replace('index.html','')) >= 0;