10

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

认为这会工作..但遗憾的是它不是。有任何想法吗?

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

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

4

5 回答 5

13

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

$('a').live('click', function() {
    window.open($(this).attr('href'));
    return false;
});
于 2011-06-09T02:14:01.533 回答
6

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

请记住,当您调用类似$('a').attr(...whatever...)的内容时,它将立即对页面上的任何和所有现有元素生效。所以,...如果您的tweet插件是异步的并且执行时间超过 0 毫秒,那么您的代码似乎正在尝试更改页面上甚至不存在的链接的属性。

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

因此,您可以尝试查看tweet您正在使用的插件是否具有某种“全部完成”或其他完成回调,然后您可以使用它来更改链接标签。或者,就像我也赞同的另一个答案所建议的那样,不仅要尝试更改链接标签,还要在页面上的任何链接点击时收听(实时),并在那个时间点拦截它们。这样,您无需担心推文插件的时间/完成,因为您可以使用live在任何时间点都有效的事件委托 ( )。有关如何执行此操作的一个很好的示例,请参阅 Petah 的答案。

祝你好运!

于 2011-06-09T02:37:43.090 回答
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>
于 2011-06-09T02:16:31.603 回答
2

尝试:

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

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

于 2011-06-09T02:17:28.077 回答
1

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

于 2011-06-09T02:28:22.293 回答