如何用Javascript更改所有外部链接?

时间:2017-07-23 17:53:00

标签: javascript hyperlink

我想用Javascript替换所有外部链接.. 我只想在每个外部链接之前添加“http://example.com/go=”... 我该怎么做? 请帮忙..

4 个答案:

答案 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测试它,但也可以考虑解决方案)。如果没有,则添加前缀。

&#13;
&#13;
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;
&#13;
&#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);
});

Example

答案 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代码的编辑。我不想对那里的东西做出重大改变。