Javascript 使用jQuery在锚定链接之前添加当前页面URL
我一直在使用一个平台(Nationbuilder),它会自动在标题中添加基本标记。直到最近才出现,现在几十个带有锚链接的页面最终将用户发送到主页 我需要使用jQuery在#锚之前添加当前页面的url。我能找到的最接近的代码是以下代码,但我不知道如何修改它,因此只修改以#开头的href属性的链接:Javascript 使用jQuery在锚定链接之前添加当前页面URL,javascript,jquery,Javascript,Jquery,我一直在使用一个平台(Nationbuilder),它会自动在标题中添加基本标记。直到最近才出现,现在几十个带有锚链接的页面最终将用户发送到主页 我需要使用jQuery在#锚之前添加当前页面的url。我能找到的最接近的代码是以下代码,但我不知道如何修改它,因此只修改以#开头的href属性的链接: $("a").attr("href", "http://www.example.com/pageslug") 因此,我想: <a href="#anchorname"></a>
$("a").attr("href", "http://www.example.com/pageslug")
因此,我想:
<a href="#anchorname"></a>
改为:
<a href="http://www.example.com/pageslug#anchorname"></a>
您可以使用CSS属性,该属性以选择器开头: 不要选择
“a”
,而是选择“a[href^=“#”]”
,意思是“a标签的href属性以#
开头
比如:
$('a[href^="#"]').each(function(i,el){
el.href = "http://www.example.com/pageslug" + el.hash;
});
像这样的事
$('a').attr('href', window.location.pathname + this.attr('href'))
除了Benjamin所说的,您还需要捕获每个锚的当前href,这意味着您需要一个循环
$('a[href^="#"]').each(function(index, element){
var $ele = $(element),
oldHref = $ele.attr('href');
$ele.attr('href', '//example.com/page'+ oldHref);
});
Benjamin添加了一个循环,他的代码甚至是最基本的,当原生DOM对象没有好处时,您不需要(也不应该)包装它,每个
htmlanchoreElement
(“标记”)它有一个.href
属性,你可以直接使用:)是的,你的解决方案很棒。我太专注于jQuery;)但是Benjamin的小提琴在Chrome 33.0.1750.146上不起作用。你的代码似乎给出了预期的结果:奇怪。我完全喜欢他的代码。为什么它不起作用?我觉得这是一个足够好的问题我想你的小提琴似乎改变了http://www.example.com/pageslughttp://fiddle.jshell.net/3c2aB/show/#about
而不是http://www.example.com/pageslug#about
.el.href返回完整的解析url,而$(el).attr('href')返回根据需要只给出href属性的值。@Novaugust的解决方案似乎有效。@Ketola您完全正确,这应该是el.hash
,而不是el.href
-尼斯捕获将更新,使用el.getAttribute(“href”)
如果您需要处理包含不仅仅是散列的相对HREF,即“/about”
->“example.com/about”
如果我想获得路径,我会使用el.pathname
。这也是内置的。谢谢Ben!这节省了大量时间!