我想用Javascript替换所有外部链接.. 我只想在每个外部链接之前添加“http://example.com/go=”... 我该怎么做? 请帮忙..
答案 0 :(得分:1)
如果当前document.links
不包含HTMLCollection
.href
.href
并将document.domain
属性设置为所需的字符串
Array.from(document.links)
.forEach(link =>
link.href = new RegExp(document.domain).test(link.href)
? link.href : "http://example.com/go=")
答案 1 :(得分:1)
以下代码段应该有效。它遍历所有<a>
个元素,并检查href
是否包含当前域(我使用RegExp测试它,但也可以考虑解决方案)。如果没有,则添加前缀。
const originReg = new RegExp(location.hostname, 'i');
document.querySelectorAll('a').forEach(a => {
if (originReg.test(a.href)) return /* internal link */;
a.href = `http://example.com/go?url=${encodeURI(a.href)}`;
});
&#13;
<a href="/bar">Bar</a>
<a href="baz">Baz</a>
<a href="http://example.com/foo">Foo</a>
&#13;
答案 2 :(得分:0)
document.querySelectorAll('a').forEach((anchor) => {
// make sure we return the relative path, not the absolute
// getAttribute(), not .href
const href = anchor.getAttribute('href');
const str = 'http://example.com/go=';
// if the link is an external link, update
// the href attribute
/:\/\//.test(href) && anchor.setAttribute('href', str + href);
});
答案 3 :(得分:0)
这只会定位外部链接。
document.querySelectorAll('a').forEach((anchor) => {
// make sure we return the relative path, not the absolute
const target = anchor.getAttribute('target');
If ( target === '_blank' ){
const href = anchor.getAttribute('href');
const str = 'http://example.com/go=';
anchor.setAttribute('href', str + href);
}
});
//大部分是对@Andy代码的编辑。我不想对那里的东西做出重大改变。