2011-07-25 196 views
7

我需要编写一个方法,该方法需要一个字符串并解析链接(a href)。如果它找到了一个链接,它应该将链接添加target =“_ blank”(如果它尚未存在)。添加目标=“_ blank”以链接到JavaScript

例子: 的Inputstring“

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

...应该导致输出字符串

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

任何想法如何实现这一

回答

10

不是用普通的js非常困难。

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

for(var i=0; i<len; i++) 
{ 
    links[i].target = "_blank"; 
} 
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>')); 
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.' 
+0

jQuery解决方案听起来不错,但我是JavaScript的绝对初学者。所以,当我有x中的字符串(我假设的一个数组)后,我怎样才能将它们结合回字符串? – Paul

+0

@Paul:我更新了jQuery的完整答案,看看它是否适合你。基本上,在jQuery中,要获得“外部HTML”,您必须首先将这些项目包装到另一个元素中并获取其内部HTML。 – maerics

+0

非常感谢! – Paul

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

相关问题