【发布时间】:2011-09-11 08:31:48
【问题描述】:
我有一些链接通过 JSON 动态放置在我的页面中,无法直接编辑它们。我想强制所有链接在新标签页中打开,ala target="_blank"
认为这会起作用..但遗憾的是它不是。有什么想法吗?
$('a').attr("target","_blank");
这是一个带有动态代码的 jsFiddle: http://jsfiddle.net/danielredwood/mrgta/7/
【问题讨论】:
我有一些链接通过 JSON 动态放置在我的页面中,无法直接编辑它们。我想强制所有链接在新标签页中打开,ala target="_blank"
认为这会起作用..但遗憾的是它不是。有什么想法吗?
$('a').attr("target","_blank");
这是一个带有动态代码的 jsFiddle: http://jsfiddle.net/danielredwood/mrgta/7/
【问题讨论】:
您可以这样做(让用户浏览器决定是否打开新窗口或标签)
$('a').live('click', function() {
window.open($(this).attr('href'));
return false;
});
【讨论】:
target 属性设置为_blank,正如其他答案中所建议的那样,因为我是老派,而且效果很好。但是这个特殊的解决方案——如果有人关心这些事情——实际上是应该推荐的,如果有人关心验证(因为target 是一个已弃用的属性)。
您的问题可能是时间问题。
请记住,当您调用 $('a').attr(...whatever...) 之类的名称时,它会立即对页面上的所有现有元素生效。所以,...如果您的 tweet 插件是异步的并且执行时间超过 0 毫秒,那么您的代码似乎正在尝试更改页面上尚不存在的链接的属性 。
也就是说,您可能 (A) 调用 tweet 插件,(B) 更改页面上的所有链接,然后 (C) 推文插件完成并在获得的页面上注入一堆新链接之前错过了。
因此,您可以尝试查看您正在使用的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>
【讨论】:
'new' 替换为'_blank',它仍然对您有用吗?只是问问而已。如果是这样,那么OP可能还有其他问题。如果没有,我想知道原因。
试试:
$('a').attr({ target: "_blank" });
另外,请尝试“_new”而不是空白。如果这不起作用,为什么不发布生成的 html 或整个 javascript 代码?
【讨论】:
它不起作用,因为当$('a').attr("target","_blank"); 被触发时,<a> 还不是您页面的一部分。
【讨论】: