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

tec*_*ant 10 anchor jquery target attr

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

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

 $('a').attr("target","_blank");
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*tah 13

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

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

  • 我想知道为什么这会被贬低?它应该像宣传的那样工作.在旁注中,我确实喜欢将`target`属性设置为`_blank`,正如其他答案中所建议的那样,因为我老了,而且效果很好.但是这个特殊的解决方案 - 如果一个人甚至关心这些事情 - 实际上是一个应该被推荐的人,如果一个人关心验证(因为`target`是一个弃用的属性). (2认同)

Fun*_*nka 6

你的问题可能是时间问题.

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

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

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

祝好运!