添加target =“_ blank”以链接JavaScript

时间:2011-07-25 22:08:21

标签: javascript

我需要编写一个方法,它接受一个String并解析它的链接(一个href)。如果它找到了一个链接,它应该在链接中添加target =“_ blank”,如果它还没有。

实施例: 输入字符串“

 <a href="www.google.com">Google</a> and <a href="www.yahoo.com"> target="_blank">Yahoo</a> are search engines

...应该导致输出String

<a href="www.google.com" target="_blank">Google</a> and <a href="www.yahoo.com" target="_blank">Yahoo</a> are search engines

知道如何实现这个目标吗?

5 个答案:

答案 0 :(得分:10)

使用普通的js并不是很困难。

var links = document.getElementsByTagName('a');
var len = links.length;

for(var i=0; i<len; i++)
{
   links[i].target = "_blank";
}

答案 1 :(得分:6)

充满问题,但可以使用纯JavaScript:

function addBlankTargets(s) {
  return (""+s).replace(/<a\s+href=/gi, '<a target="_blank" href=');
}

或者使用jQuery:

function addBlankTargets(s) {
  var p = $('<p>' + s + '</p>');
  p.find('a').attr('target', '_blank');
  return p.html();
}
var s = '<a href="www.google.com">Google</a> and '
      + '<a href="www.yahoo.com">Yahoo</a> '
      + 'are search engines.';
var x = addBlankTargets(s);
x; // => '<a href="www.google.com" target="_blank">Google</a> and
   //     <a href="www.yahoo.com" target="_blank">Yahoo</a>
   //     are search engines.'

答案 2 :(得分:1)

如果您的目标是现代浏览器,则可以将字符串转换为DOM,而不必处理包含HTML的字符串并必须处理所有许多特殊情况。 此时,操作DOM很简单,然后可以将其转换回序列化的字符串。

function decorateRichText(html) {
  const domParser = new DOMParser()
  const document = domParser.parseFromString(html, `text/html`)
  const serializer = new XMLSerializer()

  // Handles external links
  const links = document.querySelectorAll(`a`)

  links.forEach((link) => {
    if (link.href) {
      if (isExternalUrl(link.href)) {
        link.target = `_blank`
        link.rel = `noopener noreferrer`
      }
    }
  })

  return serializer.serializeToString(document)
}

让浏览器JS引擎完成繁重的工作并记住:您不编写的代码就是您无需调试的代码:-)

答案 3 :(得分:0)

你可以使用jQuery来解析元素,添加属性,然后读出HTML,如下所示:

 var addTarget = function(input) {
   return $('<span>' + input + '</span>').find('a').attr('target', '_blank').html();
 };

 console.log(addTarget('<a href="www.google.com">Google</a>'));

答案 4 :(得分:0)

分两行

var links = document.getElementsByTagName('a');
for(i in links)
    links[i].target=="_blank"?links[i].style.color="#f0f" : links[i].style.color ='#0f0'

jsfiddle