【问题标题】:jQuery addClass to menu items based on URL (WordPress persistant Network menu)基于 URL 的 jQuery addClass 到菜单项(WordPress 持久网络菜单)
【发布时间】:2013-04-24 08:15:23
【问题描述】:

我正在尝试在 WordPress 多站点安装上设置一个持久的网络范围菜单。这是使用Network wide menu plugin 实现的,并且效果很好。唯一的问题是样式,因为自动“当前菜单项”类仅在主博客上嵌入到相应的菜单链接中。

所以我研究了 .addClass() 函数,以根据当前 URL 将类添加到菜单项中,这就是我到目前为止所提出的。请记住,我也在尝试突出显示父项,这就是我还使用 .parentsUntil() 类的原因。

这是我的网络设置(每个域对应一个 WordPress 实例):

domain.com  
blog1.domain.com  
blog1.domain.com  
blog1.domain.com  

这是我的 jQuery 代码:

jQuery(function() {
jQuery('#megaUber ul li').removeClass('activeMenu');
var href = window.location.href;
if (href.indexOf('http://domain.com) != -1) {
    jQuery('#megaUber a').parentsUntil('.ss-nav-menu-item-depth-0').addClass('activeMenu');
} else if (href.indexOf("http://blog1.domain.com") != -1) {
    jQuery('#megaUber li a[href="'+href+'"]').parentsUntil('.ss-nav-menu-item-depth-0').addClass('activeMenu');
} else if (href.indexOf("http://blog2.domain.com") != -1) {
    jQuery('#megaUber li a[href="'+href+'"]').parentsUntil('.ss-nav-menu-item-depth-0').addClass('activeMenu');
} else if (href.indexOf("http://blog3.domain.com") != -1) {
    jQuery('#megaUber li a[href="'+href+'"]').parentsUntil('.ss-nav-menu-item-depth-0').addClass('activeMenu');
}
});

HTML 菜单标记

<div id="megaMenu">
<ul id="megaUber" class="megaMenu" data-theme-location="primary">
 <li id="menu-item-20" class="nav-cgroupe menu-item menu-item-type-post_type menu-item-object-page current-page-ancestor current-menu-ancestor current-menu-parent current-page-parent current_page_parent current_page_ancestor mega-with-sub ss-nav-menu-item-1 ss-nav-menu-item-depth-0 ss-nav-menu-mega ss-nav-menu-mega-alignCenter ss-nav-menu-with-desc">
  <a href="http://domain.com">domain.com</a>
   <ul class="sub-menu sub-menu-1" style="display: none;">
    <li id="menu-item-25" class="menu-item menu-item-type-post_type menu-item-object-page ss-nav-menu-item-depth-1">
     <a href="http://domain.com/link1">Link1</a>
    </li>
    <li id="menu-item-24" class="menu-item menu-item-type-post_type menu-item-object-page ss-nav-menu-item-depth-1">
     <a href="http://domain.com/link2">Link2</a>
    </li>
    <li id="menu-item-23" class="menu-item menu-item-type-post_type menu-item-object-page ss-nav-menu-item-depth-1">
     <a href="http://domain.com/link3">Link3</a>
    </li>
   </ul>
  </li>
  <li id="menu-item-26" class="nav-cconseil menu-item menu-item-type-custom menu-item-object-custom mega-with-sub ss-nav-menu-item-2 ss-nav-menu-item-depth-0 ss-nav-menu-mega ss-nav-menu-mega-alignCenter ss-nav-menu-with-desc">
   <a href="http://blog1.domain.com">blog1.domain.com</a>
    <ul class="sub-menu sub-menu-1" style="display: none;">
     <li id="menu-item-53" class="menu-item menu-item-type-custom menu-item-object-custom ss-nav-menu-item-depth-1">
      <a href="http://blog1.domain.com/link1">Link1</a>
     </li>
     <li id="menu-item-54" class="menu-item menu-item-type-custom menu-item-object-custom ss-nav-menu-item-depth-1">
      <a href="http://blog1.domain.com/link2">Link2</a>
     </li>
     <li id="menu-item-55" class="menu-item menu-item-type-custom menu-item-object-custom ss-nav-menu-item-depth-1">
      <a href="http://blog1.domain.com/link3">Link3</a>
     </li>
    </ul>
   </li>
  </ul>
</div>

我已经扭曲了这么多不同的方法,但无法做到正确......有人知道如何实现吗?

谢谢你, C.

【问题讨论】:

  • 我猜有语法错误。你在 if (href.indexOf('http://domain.com) != -1) 中缺少 end '
  • 很遗憾你是对的,但它并没有解决问题。有没有完全不同的方法可以用于此?

标签: jquery wordpress menu addclass


【解决方案1】:

试试这个:

$('#megaUber li a').filter(function () {
    return this.href && this.href == location.href;
}).parentsUntil('.ss-nav-menu-item-depth-0').addClass('activeMenu');

第二行通过两个条件过滤元素集:

  1. 它们必须具有带域名(this.hostname)的 href 属性。

  2. 他们链接的域名(同样是 this.hostname)必须匹配 (==) 当前页面的域名 (location.hostname)。

更新

$('#megaUber > li > a').filter(function () {
    return this.href && this.href == location.href.slice(0, -1);
}).parentsUntil('.ss-nav-menu-item-depth-0').addClass('activeMenu');

【讨论】:

  • 您好帕拉什,感谢您的帮助。不幸的是,这不起作用。可以肯定的是,这是我在自定义 jQuery 文件中输入的内容:/* Handles navigation highlighting based on URL.*/ jQuery('#megaUber li a').filter(function () { return this.hostname &amp;&amp; this.hostname == location.hostname; }).parentsUntil('.ss-nav-menu-item-depth-0').addClass('activeMenu'); 我错过了什么吗?
  • 你好,我是 SE 新手,可能忘记用我的评论通知你...
  • 嘿,你能发布你在问题中使用的 html 标记吗?这将有助于以更好的方式找到问题!
  • 您好 Palash,我在问题中添加了一个标记示例。有什么想法吗?
  • 仍然没有运气...这是我的代码:jQuery(function() { jQuery('#megaUber ul li').removeClass('activeMenu'); var href = window.location.href; jQuery('#megaUber li a').filter(function () { return this.href &amp;&amp; this.href == location.href; }).parentsUntil('.ss-nav-menu-item-depth-0').addClass('activeMenu'); });
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 2022-01-18
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多