Откройте все ссылки в новых вкладках с помощью jQuery

у меня есть некоторые ссылки, которые размещаются на моей странице динамически через JSON и не имеют возможности напрямую редактировать их. Я хочу заставить все ссылки открываться в новых вкладках, ala target="_blank"

думал, что это сработает.. но, к сожалению, это не так. Есть идеи?

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

вот jsFiddle с динамическим кодом: http://jsfiddle.net/danielredwood/mrgta/7/

5 ответов


вы можете сделать это (что позволяет браузеру пользователей решать, открывать ли новое окно или вкладку)

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

ваша проблема может быть в сроках.

имейте в виду, когда вы называете что-то вроде $('a').attr(...whatever...), что он вступит в силу мгновенно, на всех и вся существующей элементы на странице. Так. ,.. если tweet плагин является асинхронным и занимает более 0 миллисекунд для выполнения, похоже, что ваш код пытается изменить атрибуты ссылки не существует на странице, но.

то есть, вы можете быть (A) вызываю tweet плагин, (B) изменение всех ссылок на странице, а затем (C) плагин tweet завершает и вводит кучу новых ссылок на странице, которые были пропущены ранее.

Итак, что вы могли бы попробовать, это посмотреть, если tweet плагин, который вы используете, имеет какой-то" все-сделано " или другой обратный вызов завершения, который вы можете использовать для изменения тегов ссылок. Или, как и другой предложенный ответ, который я также поддерживаю, - это не просто попытаться изменить теги ссылок, а вместо этого слушать (live) по любой ссылке нажимает на страницу и перехватывает их в этот момент времени. Таким образом, вам не нужно беспокоиться о сроках/завершении плагина tweet, так как вы можете использовать делегирование событий (live), который работает в любой момент времени. См. ответ от Petah для большого примера того, как это сделать.

удачи!


это работает для меня:

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

это не работает, потому что <a> еще не является частью вашей страницы, когда $('a').attr("target","_blank"); уволен.


попробуй:

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

кроме того, попробуйте "новая" вместо пробела. Если это не работает, почему бы не опубликовать сгенерированный html или весь код javascript?