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 只检测到域之后的第一个路径名,那么我将是黄金。第一个路径名之后的任何内容都可以省略或设置为通配符或其他内容。

有任何想法吗?

4

3 回答 3

2

您可以尝试使用attribute contains selector

var dom = document.domain;
var f = location.pathname.split('/')[1]; 
var url = dom + "/" + f;

$('.nav li a[href*="'+url+'"]').closest("li").prependTo(".nav");
于 2012-10-07T01:36:02.607 回答
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;
于 2012-10-07T01:27:27.337 回答
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 给你一个数组,每个元素都是斜线之间路径的一部分。听起来你只需要那个数组的第一个元素......我相信你可以从那里拿走它!

希望有帮助!

于 2012-10-07T01:32:00.080 回答