使用target =“_ blank”创建W3C验证的锚链接

时间:2010-03-10 21:18:42

标签: css xhtml target

我有以下HTML片段,点击后会创建一个新窗口:

<a href="/path/to/site" target="_blank">glide by the people</a>

问题是它没有通过W3C验证器。如何创建像上面那样确认的链接?

11 个答案:

答案 0 :(得分:9)

使用此doctype:

<!DOCTYPE html PUBLIC "-//w3c//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhmtl1/DTD/xhmtl1-transitional.dtd"> 

1.0 transitional包含一些html“遗留”代码,包括target =“_ blank”。

答案 1 :(得分:6)

假设有严格的XHTML,您可以将onclick事件绑定到相关锚点。类似的东西:

<a href="/path/to/my/link" onclick="window.open('/path/to/my/link');return false;">My link</a>

有人还会争辩说,由于逐步增强和将标记与标记分离,你应该将onclick动作与外部JavaScript分开绑定,但这是解决它的基本方法。

答案 2 :(得分:5)

  1. 验证不是全部,而是结束所有编码质量。

  2. 有些东西在浏览器中是“标准”而不是w3c标准。

  3. 当函数已经存在时,使用一点JS有点过分。

答案 3 :(得分:5)

我认为你问的是错误的问题。无论您是使用JavaScript插入目标属性还是将其放在服务器响应中,目标属性在严格的XHTML 1.0中都无效。

如果你真的想要那个属性,你必须使用不同的doctype,但这也不是正确的答案。

你应该问问自己为什么要这个属性。我猜你正试图创建一个新的标签或窗口。毋庸置疑,这通常被认为是糟糕的设计(它需要远离用户控制),但如果你真的想这样做,你可以用JavaScript来做。

以下是:

保留您的链接,但添加一个特殊的类,例如向他们“弹出”。然后添加一行JavaScript(最好使用像jQuery或Prototype这样的框架来简化它),它接受与该类的所有链接,并为它们提供一个点击处理程序,导致创建一个新的选项卡/窗口并取消默认值动作(即阻止链接作为链接工作)。尽管如此,这仍然会惹恼人们,因为它会超越预期的行为。

你不应该做的是用虚链接替换链接,并依靠JavaScript来使链接起作用。

无视这一点。 target属性不再在HTML中被弃用(生活标准或“5”,取决于您是否遵循WHW WG或W3C)。今天正确的答案是用这个替换您的DOCTYPE:

<!doctype html>

请注意,它不再必须是大写的,也不一定看起来像完整的SGML DOCTYPE声明。它只是一个残留的人工制品,将文档标识为符合标准的HTML。

答案 4 :(得分:3)

如果它只是一个或两个链接,您可以使用

进行内联
<a href="http://stackoverflow.com" onclick="window.open(this.href); return false;"></a>

不仅如此,你可能想要上面的一个js解决方案。

答案 5 :(得分:2)

而不是使用:

  

目标= “_空白”

使用:

  

的onclick = “this.target = '_空白'”

请注意双引号内的单引号。这解决了我的验证问题,无需重新定义doctype。

答案 6 :(得分:1)

使用W3C严格验证无法做到这一点。

解决方案是:

    $(document).ready(function(){
          $('A[rel="_blank"]').each(function() {
               $(this).attr('target', '_blank');
          });
     });
     // ...OR...
     $(document).ready(function(){
          $('A[rel="_blank"]').click(function() {
               window.open($(this).attr('href'));
               return false;
          });
     });
  • 此外,根据this doctype page,HTML5应该允许对atrtribute进行验证,并确定它的价值。

答案 7 :(得分:1)

  1. rel="new-window"属性添加到链接(而不是target="_blank"
  2. 将jquery脚本添加到页首并添加以下代码段

    <script type="text/javascript">
        $(document).ready(function(){
            $('a[rel="new-window"]').click(function(){
                window.open(this.href);
            })
        });
    </script>
    
  3. (请注意,当我在stackoverflow文本框中键入它时,我还没有测试过它。)

答案 8 :(得分:1)

实际上,这里提出的通过JavaScript添加“目标”属性的解决方案完全符合标准!

根据W3C DOM Level 1规范,接口HTMLLinkElement DO具有target属性,尽管HTML 4.01规范中的A元素没有它。

因此在html文件中编写“target”属性是无效的,但是稍后通过使用JS的DOM接口将其添加到文档树是有效的。

答案 9 :(得分:1)

如果您需要辅助功能或跨平台互操作性,则可能需要验证您的网页。有一个很好的文件回答了“为什么验证?”的问题。由W3.org发布http://validator.w3.org/docs/why.html

恕我直言,当您花费额外的时间进行验证时,它会显示您关心您的受众。然后,您将拥有在IE,Opera,Safari和Firefox上显示几乎相同的页面。

答案 10 :(得分:-1)

<a href="..." onclick="return !window.open(this.href)">...</a>