#jquery #anchor #target #attr
#jquery #привязка #цель #attr
Вопрос:
У меня есть некоторые ссылки, которые динамически размещаются на моей странице с помощью JSON, и у меня нет возможности напрямую редактировать их. Я хочу заставить все ссылки открываться на новых вкладках, аля target="_blank"
Думал, что это сработает .. но, к сожалению, это не так. Есть идеи?
$('a').attr("target","_blank");
Вот jsFiddle с динамическим кодом:
http://jsfiddle.net/danielredwood/mrgta/7
Ответ №1:
Вы могли бы сделать это (что позволяет браузеру пользователя решать, открывать ли новое окно или вкладку)
$('a').live('click', function() {
window.open($(this).attr('href'));
return false;
});
Комментарии:
1. Интересно, почему это было отклонено? Это должно работать так, как рекламируется. Кроме того, мне нравится устанавливать
target
атрибут на_blank
, как было предложено в других ответах, потому что я старой школы, и это работает хорошо. Но это конкретное решение — если кто-то вообще заботится о таких вещах — на самом деле то, которое следует рекомендовать, если кто-то заботится о проверке (посколькуtarget
это устаревший атрибут).2. PS, пожалуйста, посмотрите мой отдельный ответ на этой странице, который подтверждает этот же ответ по другой причине: время.
Ответ №2:
Ваша проблема может заключаться в выборе времени.
Имейте в виду, когда вы вызываете что-то вроде $('a').attr(...whatever...)
, что это вступит в силу мгновенно для всех без исключения существующих элементов на странице. Итак, … если ваш tweet
плагин асинхронен и выполнение его занимает более 0 миллисекунд, похоже, что ваш код пытается изменить атрибуты ссылок, которые еще даже не существуют на странице.
То есть вы могли бы (А) вызвать tweet
плагин, (Б) изменить все ссылки на странице, а затем (В) плагин tweet завершит работу и добавит кучу новых ссылок на страницу, которые были пропущены ранее.
Итак, что вы могли бы попробовать, так это посмотреть, есть ли в tweet
используемом вами плагине какой-нибудь «all-done» или другой обратный вызов завершения, который вы могли бы затем использовать для изменения тегов ссылок. Или, как было предложено в другом ответе, который я также поддерживаю, заключается в том, чтобы не просто пытаться изменить теги ссылок, но вместо этого прослушивать (в реальном времени) при любом нажатии на ссылку на странице и перехватывать их в этот момент времени. Таким образом, вам не нужно беспокоиться о сроках завершения работы плагина tweet, поскольку вы можете использовать делегирование событий ( live
), которое работает в любой момент времени. Смотрите ответ от Petah для получения отличного примера того, как это сделать.
Удачи!
Ответ №3:
Это работает для меня:
<!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>
Комментарии:
1. Если вы замените
'new'
на'_blank'
, у вас это все еще работает? Просто спрашиваю. Если это произойдет, возможно, у OP есть другие проблемы. Если это не так, я хотел бы знать, почему.2. @Dave Maple — Без кубиков. Загрузил jsFiddle для демонстрации. Опубликовано в вопросе
3. @Dave Maple — забыл упомянуть, что ваш код работает с существующими ссылками, но не со ссылками, загруженными через JSON.
4. @Dave: Да, у нее определенно есть другая проблема.
5. @Dave — это в jsFiddle. Используя подключаемый модуль Twitter.
Ответ №4:
Попробуйте:
$('a').attr({ target: "_blank" });
Кроме того, попробуйте «_new» вместо пустого. Если это не сработает, почему бы не опубликовать сгенерированный html или весь ваш javascript-код целиком?
Ответ №5:
Это не работает, потому что <a>
еще не является частью вашей страницы, когда $('a').attr("target","_blank");
запускается.
Комментарии:
1. @technopeasant, я не уверен.