9

我有以下一段 HTML,单击时会创建一个新窗口:

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

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

4

11 回答 11

9

使用此文档类型:

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

1.0 过渡版包含一些 html“遗留”代码,包括 target="_blank"。

于 2010-03-10T21:20:21.627 回答
6

假设严格的 XHTML,您会将 onclick 事件绑定到有问题的锚点。就像是:

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

有人还会争辩说,由于渐进式增强和将行为与标记分开,您应该将该 onclick 操作与外部 JavaScript 单独绑定,但这是实现它的基本方法。

于 2010-03-10T21:22:39.747 回答
5

我想你问错问题了。target 属性在严格的 XHTML 1.0 中是无效的,无论您是使用 JavaScript 插入它还是仅仅将它放在服务器响应中。

如果您真的想要该属性,则必须使用不同的文档类型,但这也不是正确的答案。

您应该问自己为什么需要该属性。我猜你正在尝试创建一个新的选项卡或窗口。不用说,这通常被认为是糟糕的设计(它剥夺了用户的控制权),但如果你真的想这样做,你可以用 JavaScript 来做。

就是这样:

保留您的链接,但添加一个特殊的类,例如“弹出”给它们。然后添加一行 JavaScript(最好使用 jQuery 或 Prototype 之类的框架以使其更容易),获取该类的所有链接并为它们提供单击处理程序,从而创建新选项卡/窗口并取消默认值操作(即停止链接作为链接工作)。但是,这仍然会惹恼人们,因为它会覆盖预期的行为。

您不应该做的是用虚拟链接替换链接并依赖 JavaScript 来使链接正常工作。

不理会。该target属性在 HTML 中不再被弃用(生活标准或“5”,取决于您遵循 WHAT WG 还是 W3C)。今天正确的答案是用这个替换你的 DOCTYPE:

<!doctype html>

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

于 2010-03-10T21:36:23.530 回答
5
  1. 验证并不是编码质量的全部和全部。

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

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

于 2010-03-10T21:25:16.390 回答
3

如果它只是一两个链接,你可以内联

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

不仅如此,您可能还想要上面的 js 解决方案之一。

于 2010-03-10T21:34:35.993 回答
2

而不是使用:

目标="_空白"

利用:

onclick="this.target='_blank'"

注意双引号内的单引号。这为我解决了验证问题,而无需重新定义文档类型。

于 2015-03-17T16:51:19.427 回答
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>
    

(请注意,当我在 stackoverflow 文本框中输入此内容时,我尚未对其进行测试。)

于 2010-03-10T21:42:59.537 回答
1

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

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

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

于 2010-10-21T18:11:23.700 回答
1

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

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

于 2011-08-04T21:50:12.723 回答
1

你不能通过 W3C 严格验证来做到这一点。

解决方案是:

    $(文档).ready(函数(){
          $('A[rel="_blank"]').each(function() {
               $(this).attr('target', '_blank');
          });
     });
     // ...或者...
     $(文档).ready(函数(){
          $('A[rel="_blank"]').click(function() {
               window.open($(this).attr('href'));
               返回假;
          });
     });
  • 此外,根据这个 doctype page,HTML5 应该允许验证目标属性,看看它的价值。
于 2010-03-10T21:23:32.150 回答
-1
<a href="..." onclick="return !window.open(this.href)">...</a>
于 2012-01-03T16:54:00.093 回答