jQuery如果URL的第一个路径名与href匹配则...

4
这是关于另一个主题的参考:jQuery - If URL matches href then move LI to top of UL? Jquery 代码:
//set var to current url
var url = window.location.toString();

//if url matches li's anchor then bring it to the top of the list
$('.nav li a').each(function(){
   var myHref= $(this).attr('href');
   if( url == myHref) {
        $(this).closest("li").prependTo(".nav");
   }
});

HTML只是来自WordPress导航,类似于以下内容:
<navrole="navigation">
  <ul>
    <li>
      <a href="">

导航链接到各个分类,URL与href相匹配而且代码也可以运行。但是,我无法弄清楚如何使代码在进入类别的子页面时也能运行,例如当URL为:
domain.com/category-name/child-page

如果我可以让Jquery仅检测域名后的第一个路径名,那么就好了。第一个路径名之后的任何内容都可以省略或设置为通配符之类的东西。有什么想法吗?

你是什么意思?第一个路径名超过了域名。 - Sushanth --
3个回答

2
您可以尝试使用“属性包含选择器”:
var dom = document.domain;
var f = location.pathname.split('/')[1]; 
var url = dom + "/" + f;

$('.nav li a[href*="'+url+'"]').closest("li").prependTo(".nav");

谢谢,这个很好用,并且为我的应用程序提供了完整的解决方案! - Bryan Hyshka

0

我已经为我的网站实现了这样一种技术。以下是我的实现方法:

var Tabs = ["Tab1", "Tab2", "Tab3", "Tab4", "Tab5"];
var pathname = document.location.pathname;
for (var i = 0; i < Tabs.length; i++) {

    //RegExp to check the name after first '/'
    var TabRE = new RegExp("^\/(" + Tabs[i] + ")");
    if (TabRE.test(pathname)) {
        //Tab identified!!!
    }

或者,如果你只是想获取“域名后的第一个路径名”,你可以简单地执行以下操作

var path = (document.location.pathname).substring(1);
var name;
if (path.indexOf('/') >= 0)
    name = path.substring(0, path.indexOf('/'));
else name = path;

谢谢,我认为这也可以解决问题,但是undefined似乎有一个更适合我的应用程序的答案,看起来更简单。不过还是感谢你的回答。 - Bryan Hyshka

0
你需要使用路径名来访问域名后的所有内容,然后在斜杠上拆分字符串。
var pathname = window.location.pathname;  //"category-name/child-page"
var path_components_arr = pathname.split("/");  //array containing components from above, in order.

接下来,path_components 会给你一个数组,每个元素都是斜杠之间路径的一部分。 看起来你只需要这个数组的第一个元素就好了... 相信你可以继续完成!

希望能对你有所帮助!


谢谢chinnychinchin,看起来这也可以工作,并且未定义的包含pathname.split到上面的完整解决方案中。 - Bryan Hyshka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接