我有以下HTML片段,点击后会创建一个新窗口:
<a href="/path/to/site" target="_blank">glide by the people</a>
问题是它没有通过W3C验证器。如何创建像上面那样确认的链接?
答案 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)
验证不是全部,而是结束所有编码质量。
有些东西在浏览器中是“标准”而不是w3c标准。
当函数已经存在时,使用一点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严格验证无法做到这一点。
解决方案是:
已提及的过渡性文件类型
其他验证工具(例如CSE)
使用JavaScript替换“_blank” - 请参阅http://www.ajaxblender.com/open-links-new-window-w3c-valid-target-blank.html(该链接显示如何使用jQuery整齐地完成 - 我正在粘贴下面的两个示例)。
$(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; }); });
答案 7 :(得分:1)
rel="new-window"
属性添加到链接(而不是target="_blank"
)将jquery脚本添加到页首并添加以下代码段
<script type="text/javascript">
$(document).ready(function(){
$('a[rel="new-window"]').click(function(){
window.open(this.href);
})
});
</script>
(请注意,当我在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>