2011-07-25 30 views
7

Necesito escribir un método que toma una cadena y la analiza para enlaces (a href). Si encuentra un enlace, debe agregar target = "_ blank" al enlace, si aún no está allí.Agregar target = "_ blank" para vincular con JavaScript

Ejemplo: El inputString "

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

... debe dar lugar a la salida de cadena

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

alguna idea de cómo realizar este

Respuesta

10
No

muy difícil con js lisos.

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

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

Puede utilizar jQuery para analizar? el elemento, agregue el atributo, y luego lea el HTML, como lo siguiente:

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

plagada de problemas pero utilizable con llanura de JavaScript:

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

O con 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

La solución jQuery suena bien pero soy un principiante absoluto en JavaScript. Entonces, después de tener las cadenas en x (una matriz supongo) ¿cómo puedo combinarlas de nuevo en una cadena? – Paul

+0

@Paul: actualicé mi respuesta de jQuery para ver si está completa, mire si eso funciona para usted. Básicamente, en jQuery, para obtener el "HTML externo" primero debe envolver los elementos en otro elemento y obtener su HTML interno. – maerics

+0

Muchas gracias !!!! – Paul

0

en dos líneas

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

jsfiddle

Cuestiones relacionadas