使用Jquery在新窗口打开链接

7
我正在尝试使用Jquery而不是_blank在新窗口中打开一些链接,以使我的HTML保持有效。我的代码如下:
$(document).ready(function() {
    $('a[id="external-url"]').click(function(){
        $(this).attr('target','_blank');
    });
});

这很好用,但当链接包含在我使用Jquery load()方法放置在页面上的html中时,就不起作用了。有人能解释一下为什么并提供解决方案吗?

4个回答

15

更新: 如果您在HTML5+世界中阅读此内容,target属性不再被弃用(更准确地说不再缺失),因为它已在XHTML 1.0中被弃用(原始问题的上下文)。我建议,如果您现在在阅读此内容,请忽略以下所有内容使用target属性,无论是否会引发合规警告,所有浏览器都支持它,并且它本应该没有被省略...事实上它后来又被添加回到了规范中,这表明删除它是一个错误。


这将起作用:

$('a#external-url').live('click', function(){
  $(this).attr('target','_blank');
});

然而,ID应该是唯一的,如果你加载了多个,则它们需要使用类来替代,如下所示:

<a href="http://google.com" class="exteral-url">Google</a>

可以用类似这样的 jQuery:

$('a.external-url').live('click', function(){
  $(this).attr('target','_blank');
});

符合标准的方法应该是:

$('a.external-url').live('click', function(e){
  window.open(this.href);
  e.preventDefault(); //or return false;
});

1
“-1 _blank已被弃用!即使您通过脚本添加属性来解决验证问题。” - James Westgate
@James - 我正在修复OP点击未绑定的问题。如果他们想要绕过验证,那是他们的决定,而不是我的决定,问题在于JavaScript无法正常工作。顺便说一句,通常我会同意,但_W3C_将_blank_废弃实际上是一个轻微的愚蠢错误。我敢打赌,5年后每个浏览器仍然支持_blank,你愿意打赌100美元吗? - Nick Craver
我必须承认当我自己发现这件事时,我有点惊讶,但我们现在不能选择忽略哪些标准... 尝试将投票下降,但它太旧了 叹气 - James Westgate
1
@James - 编辑,添加符合标准的方式,这是一个完全有效的观点 :) - Nick Craver
1
除非您使用类似XHTML 1.1/2的东西,否则这个答案是错误的,请查看我的下面的回答。 - Tower
@rFactor - 我添加了更多信息的更新,我同意今天发现这个问题的任何人最好忽略这个答案,而是使用target属性,无论警告如何。在最初回答时,不确定它是否会被添加回XHTML规范...或者HTML5的未来是什么。现在我们知道了两者,我们可以安全地说,遵守XHTML 1.0严格规范是完全不必要的复杂化。 - Nick Craver

4

1

使用.live()

$('a[id="external-url"]').live("click", function(){
        $(this).attr('target','_blank');
    });

你的代码将绑定点击事件到在页面加载时可用的元素,而不是动态创建的元素。Live 将绑定事件到动态创建的元素。


1

与其他人所认为的相反,根据HTML5规范,target属性及其所有值并未被弃用。

您可以在此处阅读相关内容:http://dev.w3.org/html5/markup/a.html

a元素上的target属性在先前版本的HTML中已被弃用,但现在不再被弃用,因为它在Web应用程序中非常有用,特别是与iframe元素结合使用。

因此,在HTML5中可以放心使用它。


太棒了!看起来W3C意识到了他们的错误 :P - stan
这并不完全准确(针对此问题的原始上下文)。在XHTML中它被标记为已弃用(missing,但你会听到它是deprecated),后来在XHTML中重新添加了它(我完全同意,它本来就不应该被弃用)。 - Nick Craver
是的,它曾经被弃用了,但现在,在HTML5中,它是允许的。 - Tower

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接