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

Chr*_*ris 9 css xhtml target

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

<a href="/path/to/site" target="_blank">glide by the people</a>
Run Code Online (Sandbox Code Playgroud)

问题是它没有通过W3C验证器.如何创建上述确认的链接?

gho*_*ppe 9

使用此doctype:

<!DOCTYPE html PUBLIC "-//w3c//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhmtl1/DTD/xhmtl1-transitional.dtd"> 
Run Code Online (Sandbox Code Playgroud)

1.0过渡性适用于一些html"遗留"代码,包括target ="_ blank".

  • 不是没有使用JavaScript.(请参阅下面@ajm的帖子)删除此消息的原因是由于可访问性和用户交互.用户想要控制那些东西,而不是弹出窗口.:) (3认同)

ajm*_*ajm 6

假设严格的XHTML,您可以将onclick事件绑定到相关的锚点.就像是:

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

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

  • 小抱怨:干!用`this.href`替换onclick事件处理程序中的URL.此外,将整个内容移动到JavaScript文件中,而不是使HTML混乱. (6认同)

Ric*_*haw 5

  1. 验证不是全部并且终止所有编码质量.

  2. 有些东西在浏览器中是"标准的"而不是w3c标准.

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


Ala*_*lum 5

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

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

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

这是如何做:

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

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

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

<!doctype html>
Run Code Online (Sandbox Code Playgroud)

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