2011-11-02 170 views
1

我正在为没有任何服务器端功能的站点创建菜单。因此,我动态地突出显示菜单中当前页面的唯一方法(除其他更改外)是检查当前URL并将其与当前文件的路径进行比较;当它们匹配时,我添加一个“当前”类以及更改其他一些属性的值。将href相对路径与当前URL匹配的正则表达式

的问题是,我的正则表达式只匹配是单个文件名,到其他文件夹不是相对路径的href值。例如,如果我的菜单存储在“类别”文件夹中,href="page.html"将匹配“http://www.example.com/category/page.html”,但如果我使用href="../category/page.html"则不匹配。如果我在href中使用根相对路径,则会出现同样的问题。

我现在的正则表达式是/[^\/]+$/)[0]。以下是整个脚本的样子:

$(document).ready(function() { 
    var pathname = (window.location.pathname.match(/[^\/]+$/)[0]); 
    var currA = $("#nav-sub li a[href='" + pathname + "']"); 
    var treeParent = currA.closest(".tree-parent"); 
    treeParent.attr('aria-expanded', 'true'); 
    currA.parents("li").addClass("current"); 
    treeParent.children('a').first().attr('tabindex','0'); 
}); 
+0

你知道'/ [^ \ /] + $ /'做什么吗? – Lachezar

回答

0

如果您只是在所有菜单超链接中使用了根相对路径,那么您的整个情况会更容易处理。然后你可以比较window.location.pathname。

假设是不可能的,你可以使用jq-uri库获得来自你有任何的href JavaScript的根目录的相对路径。它基本上是你正在寻找的正则表达式的库包装。

获取根相对路径对于给定的href会是这样的:在所有的菜单

  1. 循环:

    var href = "../test"; 
    
    var base_uri = new URI(window.location.href); 
    var uri = new URI(href); 
    uri.resolve(base_uri).path; 
    


    为了得到您想要的功能,你可以只锚标记

  2. 应用上面的代码对HREF获得根相对路径
  3. 将计算出的路径与window.location.path进行比较
  4. 找到匹配项时应用您的“当前”类和其他更改。

希望有所帮助。

+0

如果最简单,我可以根据需要制作相对路径。那么结果脚本会是什么样子呢?只是'var pathname =(window.location.pathname);'为第二行? – zomigi

+0

是的,如果您为链接使用根相对路径并且您的链接URI不包含查询字符串或哈希值,那么这将起作用。 “window.location.pathname”将不包含'?'或URL中的'#'或任何随后出现的内容。 例如,如果当前页面的URI是“http://asdf.com/test1/test2?q=qwerty”,那么window.location.pathname应该返回“/ test1/test2”。 – jshkol