2011-06-09 23 views
7

Tengo algunos enlaces que se colocan en mi página de forma dinámica a través de JSON y no tienen forma de editarlos directamente. Quiero obligar a todos los enlaces a abrir en nuevas pestañas, ala target="_blank"Abrir todos los enlaces en pestañas nuevas con jQuery

Pensé que esto funcionaría ... pero lamentablemente no lo es. ¿Algunas ideas?

$('a').attr("target","_blank"); 

Aquí hay una jsFiddle con el código dinámico: http://jsfiddle.net/danielredwood/mrgta/7/

Respuesta

11

usted puede hacer esto (que permite que el navegador del usuario decidir si desea abrir una nueva ventana o pestaña)

$('a').live('click', function() { 
    window.open($(this).attr('href')); 
    return false; 
}); 
+1

Me pregunto por qué esto fue downvoted? Debería funcionar como se anuncia. En una nota lateral, me gusta establecer el atributo 'target' en' _blank', como se sugirió en otras respuestas, porque soy de la vieja escuela y funciona bien. Pero esta solución en particular, si a uno le interesan tales cosas, es la que debería recomendarse si a uno le interesa la validación (ya que 'target 'es un atributo obsoleto). – Funka

+0

P.S., vea mi respuesta por separado en esta página, que respalda esta misma respuesta por otro motivo: el momento. – Funka

2

Estos trabajos para mí:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
</head> 

<body> 


<a href="http://www.google.com">test</a> 
<br /> 
<a href="http://www.yahoo.com">test2</a> 

<script> 
    $('a').attr('target', '_blank'); 
</script> 

</body> 

</html> 
+0

Si reemplaza ''new'' con'' _blank'', ¿todavía funciona para usted? Sólo preguntaba. Si lo hace, tal vez el OP tenga otros problemas. Si no es así, me gustaría saber por qué. – Sparky

+0

@Dave Maple - Sin dados. Cargó un jsFiddle para demostrar. Publicado en la pregunta – technopeasant

+0

@ Sparky672 - buen punto que también funciona. –

0

Probar:

$('a').attr({ target: "_blank" }); 

Además, pruebe "_new" en lugar de blanco. Si eso no funciona, ¿por qué no publicar el html generado o todo el código de javascript?

0

No funciona porque <a> aún no forma parte de su página cuando $('a').attr("target","_blank"); está activado.

+0

acaba de cruzar mi mente también. ¿Solución? – technopeasant

+0

@technopeasant, no estoy seguro. – Sparky

5

Tu problema podría ser uno de los tiempos.

tener en cuenta, cuando se llama algo así como $('a').attr(...whatever...), que se llevará a efecto inmediatamente , en todas y cada una existentes elementos de la página. Entonces, ... si su complemento tweet es asincrónico y tarda más de 0 milisegundos en realizarse, parece que su código está tratando de cambiar los atributos en los enlaces que ni siquiera existen en la página.

Es decir, puede estar (A) llamando al tweet, (B) cambiando todos los enlaces en la página, y luego (C) el complemento de tweet completa e inyecta un grupo de enlaces nuevos en la página que se perdió más temprano.

Entonces, lo que podría intentar, es ver si el complemento tweet que está utilizando tiene algún tipo de "finalización" u otra devolución de llamada completa, que luego podría usar para cambiar las etiquetas de enlace. O, como otra respuesta sugerida, que también respaldo, es no solo tratar de cambiar las etiquetas de enlace, sino escuchar (en vivo) en cualquier enlace los clics en la página, e interceptarlos en ese momento. De esta forma, no necesita preocuparse por el tiempo/la finalización del plugin de tweet, ya que podría usar la delegación de eventos (live) que funciona en cualquier momento. Vea la respuesta de Petah para un gran ejemplo de cómo hacer esto.

¡Buena suerte!

Cuestiones relacionadas