在#锚点之前从href链接中删除一部分?

4

我页面上有一个链接,如下:

<li class="jump"><a href="http://example.com/#about">About Me</a></li>

我想使用jQuery删除.jump类中任何URL的'http://example.com/'部分。你能告诉我正确的方向并提供最简单的代码吗?我希望代码删除井号前面的任何内容,而无需指定URL(例如,在可能的情况下在jQuery代码中删除http://example.com/)。谢谢!

只需使用本地的JavaScript split()函数。http://www.w3schools.com/jsref/jsref_split.asp - Robin Leboeuf
使用 .indexOf().slice() 方法,或使用.split()方法。你没有投入太多努力,是吗? - Sverri M. Olsen
@SverriM.Olsen,您所说的“不要花太多精力”是什么意思? - caustic
1
@caustic - 我认为这句话的意思是通常用户会展示已经尝试过的内容,包括相关代码。将这些信息放入你的问题中可以表明你已经努力研究了这个问题,并在发帖之前先尝试自己解决它。 - Lix
@Lix 噢。我曾尝试使用 PHP 完成这个任务,但效果不太好,所以我转而使用了 jQuery。我搜索了一下如何删除 URL 的一部分,但并没有找到很多关于删除锚点前面的内容的相关信息,也许是我没有用正确的术语进行搜索。感谢您的帮助。 - caustic
4个回答

7
您可以使用以下方法:

1) 使用.each()遍历所有锚点

2) 将当前href按#分割,并使用第二个数组元素

3) 将新的href与前面的#连接起来,并设置为新的href

$('.jump a').each(function(){
  $(this).attr('href','#'+$(this).attr('href').split('#')[1]);
});

0
我能想到的最简单的方法是使用锚字符#作为分隔符来拆分URL:
var url = $(".jump").attr("href"); // "http://example.com/#about"
var split_url = url.split("#");
var after_hash = split_url[1];

你的after_hash变量现在应该包含值:"about"。如果你打算将它插入回href属性中,你需要重新添加锚字符到这个值中。

由于我听起来像是你打算在多个URL上使用这个功能,我建议将这段代码放入一个函数中,并在需要时调用。


这会保持哈希完整吗?所以它将是#about而不仅仅是about,对吗? - caustic
@caustic - 不是的。当执行分割操作时,分隔符“#”会被移除。你需要将这个字符添加回“after_hash”变量中 - 我已经在我的答案中添加了这个信息。 - Lix

0
你可以使用 substringlastIndexOf
$(".jump a").each(function() {    
    var $this = $(this),
        href = $this.attr("href");

    $this.attr("href", href.substring(href.indexOf("#")));        
});

URL中的第一个#字符始终是片段标识符。如果有多个#(例如/abc#one#more),使用lastIndexOf可能会找到错误的# - Sverri M. Olsen

0

以下是我使用jQuery的方法:

$(".jump a").each(function() {
    var newHref = $(this).attr("href").replace("http://example.com/", "");
    $(this).attr("href", newHref);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接