Как мне добавить target=“_blank” к ссылке в указанном div?

StackOverflow https://stackoverflow.com/questions/804256

Вопрос

Допустим, у меня есть следующий код:

<div id="link_other">
    <ul>
        <li><a href="http://www.google.com/">google</a></li>
        <li>
            <div class="some_class">
                dsalkfnm sladkfm
                <a href="http://www.yahoo.com/">yahoo</a>
            </div>
        </li>
    </ul>
</div>

В этом случае JavaScript добавил бы target="_blank" ко всем ссылкам внутри div link_other.

Как я могу это сделать, используя JavaScript?

Это было полезно?

Решение

/* here are two different ways to do this */
//using jquery:
$(document).ready(function(){
  $('#link_other a').attr('target', '_blank');
});

// not using jquery
window.onload = function(){
  var anchors = document.getElementById('link_other').getElementsByTagName('a');
  for (var i=0; i<anchors.length; i++){
    anchors[i].setAttribute('target', '_blank');
  }
}
// jquery is prettier. :-)

Вы также могли бы добавить тег title, чтобы уведомить пользователя о том, что вы это делаете, предупредить его, потому что, как уже указывалось, это не то, чего ожидают пользователи:

$('#link_other a').attr('target', '_blank').attr('title','This link will open in a new window.');

Другие советы

Не-jquery:

// Very old browsers
// var linkList = document.getElementById('link_other').getElementsByTagName('a');

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

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

Имейте в виду, что веб-разработчики и эксперты по юзабилити в целом считают это плохой практикой.Якоб Нильсон вот что говорит об устранении контроля над работой пользователей в Интернете:

Избегайте создания нескольких окон браузера, если это вообще возможно — лишение пользователей кнопки "Назад" может сделать их работу настолько болезненной, что обычно это намного перевешивает любую выгоду, которую вы пытаетесь предоставить.Одна из распространенных теорий в пользу создания второго окна заключается в том, что оно удерживает пользователей от ухода с вашего сайта, но по иронии судьбы это может иметь прямо противоположный эффект, не позволяя им вернуться, когда они захотят.

Я полагаю, что это является основанием для удаления целевого атрибута W3C из спецификации XHTML 1.1.

Если вы твердо намерены использовать этот подход, решение Пима Ягера - это хорошо.

Более приятной и удобной для пользователя идеей было бы добавить графическое изображение ко всем вашим внешним ссылкам, указывающее пользователю, что переход по ссылке приведет их к внешним ссылкам.

Вы могли бы сделать это с помощью jquery:

$('a[href^="http://"]').each(function() {
    $('<img width="10px" height="10px" src="/images/skin/external.png" alt="External Link" />').appendTo(this)

});

Использование jQuery:

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

Я использую это для каждой внешней ссылки:

window.onload = function(){
  var anchors = document.getElementsByTagName('a');
  for (var i=0; i<anchors.length; i++){
    if (anchors[i].hostname != window.location.hostname) {
        anchors[i].setAttribute('target', '_blank');
    }
  }
}

Встроенный:

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

Используйте это для каждой внешней ссылки

$('a[href^="http://"], a[href^="https://"]').attr('target', '_blank');
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top