如何在 JavaScript 中获取“原始”href 内容

IT技术 javascript anchor href relative-url
2021-03-06 19:44:36

我正在尝试编写一个 GreaseMonkey 脚本,我想在其中找到所有相对链接的链接。在我看来,这样做的方法是将 href 的内容与/^https?:///.

但是我发现当我访问锚点的 href 属性时,它总是被规范化或煮熟为包含“http”的表单。也就是说,如果 HTML 包含:

<a id="rel" href="/relative/link">inner</a>

访问

document.getElementById("rel").href

回报

http://example.com/relative/link

如何访问 href 属性中的原始数据?

或者,有没有更好的方法来查找相对链接?

3个回答

试试这个getAttribute方法吧

不幸的是,即使使用这种方法,IE7 似乎也返回完全限定的 URL。
2021-04-22 19:44:36
对于那些感兴趣的人,这个 SO answer 有更多关于为什么.href.getAttibute('href')在大多数浏览器上返回不同值的信息。
2021-05-06 19:44:36

典型的。发布问题后,我几乎立即自己弄清楚了。

代替:

anchor.href

利用:

anchor.getAttribute("href")

当然,我输入这个答案所花的时间比其他人都回答的时间要长。(该死,你们这些人很快。)

这是您可以运行以进行测试的代码片段。

const anchors = document.getElementsByTagName('a');

for (let anchor of anchors) {
  let hrefFullPath = anchor.href;
  let hrefRelativePath = anchor.attributes.href.value;

  console.log('hrefFullPath', hrefFullPath);
  console.log('hrefRelativePath', hrefRelativePath);
}

假设您在http://localhost:4200,这是您在问题中显示的文档。

<a id="rel" href="/relative/link">inner</a>

这个anchor的属性值为href

document.getElementById('rel').attributes.href.value => /relative/link

而anchor的hrefvalue是:

document.getElementById('rel').href =>  http://localhost:4200/relative/link

我希望它有帮助。