Javascript jQuery基于父URL添加类

Javascript jQuery基于父URL添加类,javascript,jquery,Javascript,Jquery,在我的主页上,我目前有一个jQuery,它向link元素添加了一个类(在本例中是下划线)。这非常有效,它基于将浏览器中的url(url/firstsubmenu)与link元素的href进行比较 但是,只要我转到该链接元素的子元素(url/firstsubmenu/secondsubmenu),该类就消失了。我曾尝试拆分url,以便jQuery始终查找父url,但我无法解决它。你能帮我吗 是否可以通过添加另一个代码来解决这个问题,比如“if(this).children().length>0?”

在我的主页上,我目前有一个jQuery,它向link元素添加了一个类(在本例中是下划线)。这非常有效,它基于将浏览器中的url(url/firstsubmenu)与link元素的href进行比较

但是,只要我转到该链接元素的子元素(url/firstsubmenu/secondsubmenu),该类就消失了。我曾尝试拆分url,以便jQuery始终查找父url,但我无法解决它。你能帮我吗

是否可以通过添加另一个代码来解决这个问题,比如“if(this).children().length>0?”

以下是我的jQuery:

var cururl = window.location.href;
cururl = cururl.split('#')[0];
jQuery("a.rs-layer").each(function(){
    if(jQuery(this).attr('href')=== cururl){
        jQuery(this).addClass("current-slider-menu");
    }
});

编辑:我是新来的,我试过很多不同的代码,谷歌搜索了几个小时。我现在知道我只能在CMS中编写JavaScript。也就是说,我不能使用jQuery运算符,例如,$。

EDITED

试试这个

  var cururl = window.location.href;
    jQuery("rs-layer[id|='"+cururl.split('/')[3]+"'] , .rs-layer[href='"+cururl+"']").each(function(){
           jQuery(this).addClass("current-slider-menu");
    });

试试这个

根据您的要求更改类别/选择器。这将在li元素中添加一个独特的类,现在您可以使用css设置其样式

$(document).ready(function() {
  $(".main_menu li").removeClass('current-slider-menu');
  $(".main_menu li>a").filter(function(){
    return  this.href == location.href.replace(/#.*/, "");
  }).parent("li").addClass("current-slider-menu");
});

你肯定走对了路

您可以抓取
currentURL
(在锚点
#
之前):

然后可以将
currentURL
拆分为其组成文件夹:

const currentURLArray = currentURL.split('/');
然后,您可以分别获取所有
MyLink

const myLinks = [...document.querySelectorAll('a.rs-layer')];
最后,您可以循环使用
MyLink
,如果要匹配的文件夹名称与
currentURL
中的等效文件夹名称匹配,则可以添加
。当前滑块菜单
类:

for (myLink of myLinks) {

  if (myLink.href.split('/')[1] === currentURLArray[1]) {

    myLink.classList.add('current-slider-menu');
  }
}

完整示例:

const currentURL = window.location.href.split('#')[0];

const currentURLArray = currentURL.split('/');

const myLinks = [...document.querySelectorAll('a.rs-layer')];

for (myLink of myLinks) {

  if (myLink.href.split('/')[1] === currentURLArray[1]) {

    myLink.classList.add('current-slider-menu');
  }
}

相反,我是这样解决的,用文字装饰跳过了整个想法。 我加了一支箭。完成了

JS:

CSS:


您能详细解释一下吗?请阅读
console.log()
console.dir()
以获取调试帮助。
cururl.split('/')[0]
或者,更可能的是,
cururl.split(“/”).splice(1,3)。join(“/”)
感谢您的建议,不幸的是,尝试它们时没有成功现在就尝试它的工作子链接:研讨会,实地考察链接这肯定会奏效。任何澄清请与大家分享。这将禁用整个身体,我在这里使用滑块旋转制作滑块。您是否更改了类?我的意思是,不要编写。主菜单li>a,您需要编写自己的类。你那样做了吗?是的,我那样做了。问题是,在使用代码时,整个主体或菜单本身都会被禁用。我正在把这个写进《革命》杂志。代码中一定有一些标记系统不理解。因为你的解决方案非常合理!顺便说一下,非常感谢!我会很幸运,你会有一个解决方案来解决我的问题吗?不过,谢谢,它会在我的所有链接中加下划线(添加类)。你需要决定要匹配哪个foldername。在我上面给出的示例中,我已经匹配了
[1]
,但您可能希望匹配URL路径上更远的文件夹-即
[2]
[3]
。我不确定。。。我明白了,这会给活动项添加一个类吗?通常,在大多数CMS中,这称为当前菜单项,但在我的情况下不是这样……在添加类之前,您需要检查当前URL的一部分是否与链接的相应部分匹配。您只希望在类匹配时将其实际添加到链接中。因此,这里的重要考虑因素是,您希望匹配什么。如果我们使用此页面的URL作为类比,您可以匹配
问题
(在第一个
/
和第二个
/
之间)-但这将匹配堆栈溢出的每个问题。或者您可以匹配
60259251
(在第二个
/
和第三个
/
之间)-这将仅匹配此页面的URL。在我的情况下,“问题”是唯一的。我想匹配“问题”和“60259251”再次检查我的答案,我在您的网站上测试了当前页面在第一级root/child中有下划线,但在第二级root/child中没有下划线,所以现在我尝试了您编辑的代码。但是,我需要在家长的下面划线。。。并且只有一个子菜单。就像如果你去工作,并点击第一张图片,我需要作品(在菜单中)仍然是下划线。。。这并不不幸。但我想你的代码可以很容易地修改来实现这一点?
const currentURL = window.location.href.split('#')[0];

const currentURLArray = currentURL.split('/');

const myLinks = [...document.querySelectorAll('a.rs-layer')];

for (myLink of myLinks) {

  if (myLink.href.split('/')[1] === currentURLArray[1]) {

    myLink.classList.add('current-slider-menu');
  }
}
var url = window.location.href;
  var msg = document.getElementById('current-menu-item-arrow');
  if( url.search( 'my-word' ) > 0 ) {
      msg.style.display = "block";
  }
#current-menu-item-arrow {display:none;}