使用jQuery打开新选项卡中的所有链接

时间:2011-06-09 02:10:19

标签: jquery anchor target attr

我有一些链接通过JSON动态放置在我的页面中,无法直接编辑它们。我想强制所有链接在新标签页面中打开,ala target="_blank"

认为这会起作用..但遗憾的是它不是。有什么想法吗?

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

这是一个动态代码的jsFiddle: http://jsfiddle.net/danielredwood/mrgta/7/

5 个答案:

答案 0 :(得分:13)

您可以这样做(让用户浏览器决定是否打开新窗口或标签页)

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

答案 1 :(得分:6)

您的问题可能是时间问题。

请注意,当您拨打$('a').attr(...whatever...)之类的内容时,它会立即生效立即,对网页上的所有现有元素生效。所以,...如果您的tweet插件是异步的并且执行时间超过0毫秒,那么您的代码似乎正在尝试更改在页面上甚至不存在的链接上的属性< / em>的。

也就是说,您可能是(A)调用tweet插件,(B)更改页面上的所有链接,然后(C)推文插件完成并在页面上注入一堆新链接早些时候错过了。

所以,您可以尝试,看看您使用的tweet插件是否具有某种“全部完成”或其他完成回调,然后您可以使用它来更改链接标记。或者,像我建议的另一个答案一样,不仅仅是尝试更改链接标记,而是在页面上的任何链接点击时收听(实时),并在该时间点拦截它们。这样,您就不必担心tweet插件的计时/完成,因为您可以使用在任何时间点都可以工作的事件委派(live)。请参阅Petah的答案,了解如何执行此操作。

祝你好运!

答案 2 :(得分: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>

答案 3 :(得分:1)

尝试:

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

另外,尝试“_new”而不是空白。如果这不起作用,为什么不发布生成的html或整个javascript代码?

答案 4 :(得分:1)

它不起作用,因为在<a>被解雇时,$('a').attr("target","_blank");还不是您网页的一部分。