65 votes

Comment ajouter target="_blank" à un lien dans une div spécifiée ?

Supposons que j'ai le code suivant :

        google

                dsalkfnm sladkfm
                yahoo

Dans ce cas, le JavaScript ajouterait target="_blank" à tous les liens dans la div link_other.

Comment puis-je faire cela en utilisant JavaScript ?

1 votes

Pourquoi ne pas laisser JavaScript détecter quels liens sont externes?

144voto

artlung Points 13433
/* voici deux façons différentes de le faire */
// en utilisant jquery :
$(document).ready(function(){
  $('#link_other a').attr('target', '_blank');
});

// sans utiliser jquery
window.onload = function(){
  var anchors = document.getElementById('link_other').getElementsByTagName('a');
  for (var i=0; i

`Vous pouvez également ajouter une balise title pour informer l'utilisateur que vous le faites, pour les avertir, car comme cela a été souligné, ce n'est pas ce à quoi les utilisateurs s'attendent :

$('#link_other a').attr('target', '_blank').attr('title','Ce lien s'ouvrira dans une nouvelle fenêtre.');`

17 votes

Il a demandé du javascript, pas de jQuery.

1 votes

Pour être plus précis, vous pouvez utiliser pour les ancres : laissez les ancres = document.querySelectorAll('#sources + div a'); // Changer le sélecteur Et utilisez ES6 au lieu de la boucle for : ancres.forEach((elem) => { elem.setAttribute('target', '_blank') }

56voto

Mike Robinson Points 12273

Non-jquery:

// Navigateurs très anciens
// var linkList = document.getElementById('link_other').getElementsByTagName('a');

// Nouveaux navigateurs (IE8+)
var linkList = document.querySelectorAll('#link_other a');

for(var i in linkList){
 linkList[i].setAttribute('target', '_blank');
}

3 votes

Au lieu de getAttributesByTagName, ne devrait-ce pas être getElementsByTagName?

0 votes

Ou simplement linkList[i].target = '_blank';

3 votes

Sérieusement, jquery!=javascript... Merci pour votre publication... +1

8voto

Bayard Randel Points 5771

Gardez à l'esprit que faire cela est généralement considéré comme une mauvaise pratique par les développeurs web et les experts en ergonomie. Jakob Nielson a ceci à dire sur le fait de supprimer le contrôle de l'expérience de navigation des utilisateurs :

Évitez de créer plusieurs fenêtres de navigateur si possible - enlever le bouton "Retour" aux utilisateurs peut rendre leur expérience tellement pénible que cela dépasse généralement tout avantage que vous essayez de fournir. Une théorie courante en faveur de la création d'une deuxième fenêtre est qu'elle empêche les utilisateurs de quitter votre site, mais ironiquement cela peut avoir l'effet inverse en les empêchant de revenir quand ils le veulent.

Je crois que c'est la raison pour laquelle l'attribut cible a été supprimé par le W3C de la spécification XHTML 1.1.

Si vous êtes vraiment déterminé à adopter cette approche, la solution de Pim Jager est bonne.

Une idée plus agréable et conviviale serait d'ajouter une icône à tous vos liens externes, indiquant à l'utilisateur que le lien le dirigera vers un site externe.

Vous pouvez le faire avec jQuery :

$('a[href^="http://"]').each(function() {
    $('').appendTo(this)
});

0 votes

Bien que je sois en grande partie d'accord avec ce que vous dites, je pense que target blank et le "rel='external'" truc ont leur place, surtout lorsque vous faites un lien vers un PDF.

0 votes

Rel="external" est intéressant -- sitepoint.com/article/standards-compliant-world/3 -- même s'il semble nécessiter d'être utilisé en conjonction avec JavaScript pour fonctionner. Cela vous permet d'éviter d'utiliser l'attribut xhtml interdit "target" en ligne dans votre html. Merci de l'avoir mentionné cependant, Mike. rel="external" vaut la peine d'être suivi. :-)

0 votes

Jimmy, quelle serait ta raison de faire cela alors que tu peux utiliser un chemin relatif ?

5voto

Pim Jager Points 20018

En utilisant jQuery :

 $('#link_other a').each(function(){
  $(this).attr('target', '_BLANK');
 });

1 votes

Ne pouvez-vous pas simplement faire: $('#link_other a').attr('target', '_blank'); ?

0 votes

Plus court est: $('#link_other a').attr('target', '_blank'); comme l'a posté artlung

1voto

cfree Points 93

En ligne :

$('#link_other').find('a').attr('target','_blank');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X