【问题标题】:jquery if url first pathname matches href thenjquery如果url第一个路径名匹配href然后
【发布时间】:2012-09-27 17:39:20
【问题描述】:

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

有什么想法吗?

【问题讨论】:

  • 这个..第一个路径名过去是什么意思

标签: jquery regex url filter href


【解决方案1】:

你可以试试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");

【讨论】:

  • 谢谢,这很好,为我的应用程序整合了一个完整的解决方案!
【解决方案2】:

您将希望使用路径名来访问您的域名之后的所有内容。然后用斜杠分割字符串。

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,看起来这也可以,并且 undefined 将 pathname.split 包含在上面的完整解决方案中。
【解决方案3】:

我已经为我的网站实施了这种技术。我是这样做的:

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 似乎有一个更适合我的应用程序的答案,它似乎更简单。不过,我很感谢你的回答。
猜你喜欢
  • 2011-05-07
  • 2016-10-26
  • 1970-01-01
  • 2011-05-17
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
相关资源
最近更新 更多