在#anchor 之前删除 href 中的部分 link?

Remove part of the link in a href before #anchor?

我的页面上有一个 link:

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

如果可能,我想使用 jQuery 删除 jQuery 代码中的 'http://example.com/' part of any URL within a .jump class. Can you point me in the correct direction, with the simplest code possible? I want the code to remove anything before the hash, without specifying the URL (e.g. remove http://example.com/)。

谢谢!

我能想到的最简单的方法是使用锚字符 # 作为分隔符拆分 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 上使用此功能,所以我建议将此代码放入一个函数中并在需要时调用。

您可以使用:

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

2) 在出现 # 时拆分当前 href 并使用第二个数组元素

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

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

您可以使用 substringlastIndexOf

$(".jump a").each(function() {    
    var $this = $(this),
        href = $this.attr("href");

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

下面是我将如何使用 jQuery:

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