Как добавить target = "_ blank" к ссылке в указанном div? - PullRequest
60 голосов
/ 30 апреля 2009

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

<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?

Ответы [ 7 ]

128 голосов
/ 30 апреля 2009
/* 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. :-)

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

$('#link_other a').attr('target', '_blank').attr('title','This link will open in a new window.');
49 голосов
/ 30 апреля 2009

Non-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');
}
6 голосов
/ 30 апреля 2009

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

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

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

Если вы решительно настроены на такой подход, решение Pim Jager хорошо.

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

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

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

});
5 голосов
/ 30 апреля 2009

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

 $('#link_other a').each(function(){
  $(this).attr('target', '_BLANK');
 });
3 голосов
/ 15 марта 2014

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

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');
    }
  }
}
1 голос
/ 16 марта 2010

Встроенный:

$('#link_other').find('a').attr('target','_blank');
0 голосов
/ 24 сентября 2013

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

$('a[href^="http://"], a[href^="https://"]').attr('target', '_blank');
...