Tom*_*kay 25 html validation w3c xhtml-1.0-strict target
我刚用w3c验证器服务验证了我的实际XHTML Strict 1.0 doc ..它说,
<ul id="socialnetwork">
<li><a href="http://www.twitter.com" target="_blank"></a></li>
<li><a href="http://www.flickr.com" target="_blank"></a></li>
<li><a href="http://www.xing.com" target="_blank"></a></li>
<li><a href="http://www.rss.com" target="_blank"></a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
target ="_ blank"无效..但我需要目标为空白,因此将在浏览器中打开一个新选项卡,以便用户不会离开主页面.
我能做什么?为什么这无效?
小智 16
您可能想查看W3常见问题:http://www.w3.org/MarkUp/2004/xhtml-faq#target
为什么从XHTML 1.1中删除了目标属性?
事实并非如此.XHTML 1.0有三个版本:strict,transitional和frameset.所有这三个都是有意识地保持尽可能接近HTML 4.01,因为XML允许.XHTML 1.1是XHTML 1.0 strict的更新版本,并且没有HTML严格版本包含目标属性.其他两个版本(过渡和框架集)未更新,因为没有更新.如果要使用target属性,请使用XHTML 1.0 transitional.
您应该问自己的问题不是如何"规避"Strict的限制,而是为什么要首先使用XHTML Strict 1.0?
在你的情况下,我只会使用Transitional作为DTD.除非您正在为特定的操作系统进行开发,例如,不允许在汽车系统,移动电话或更多异国情调的设备中打开多个窗口.也就是说,btw,HTML Strict中缺少目标的原因.
但是,当你似乎为"正常"用法开发时,你的doc类型应该反映出来并且你应该使用:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
Run Code Online (Sandbox Code Playgroud)
我建议不要添加target属性.这是由于辅助功能的原因掉线了,我不喜欢当页面决定为我的我的浏览器如何标记开放.当然,如果你愿意,你可以自由地这样做.我将向您展示Darin上面提到的一种JavaScript方法,它允许您验证为XHTML 1.0 Strict或XHTML 1.1:
HTML代码:
<!-- Added link titles for better testing purposes -->
<ul id="socialnetwork">
<li><a href="http://www.twitter.com/" class="targetblank">Twitter</a></li>
<li><a href="http://www.flickr.com/" class="targetblank">Flickr</a></li>
<li><a href="http://www.xing.com/" class="targetblank">XING</a></li>
<li><a href="http://www.rss.com/" class="targetblank">RSS</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
JavaScript代码:
window.onload = function() {
// Code if document.getElementByClassName() doesn't exist
if (document.getElementsByClassName == undefined) {
document.getElementsByClassName = function(className) {
var hasClassName = new RegExp("(?:^|\\s)" + className + "(?:$|\\s)");
var allElements = document.getElementsByTagName("*");
var results = [];
var element;
for (var i = 0; (element = allElements[i]) != null; i++) {
var elementClass = element.className;
if (elementClass && elementClass.indexOf(className) != -1 && hasClassName.test(elementClass))
results.push(element);
}
return results;
}
}
var anchorList = document.getElementsByClassName('targetblank');
for (var i in anchorList) {
anchorList[i].target = '_blank';
}
}
Run Code Online (Sandbox Code Playgroud)
当然,如果已经将window.onload包含在其他位置,则可以省略它.但我建议使用它(或使用其他加载函数,如JQuery $(document).ready();),以便在页面加载完成后加载JavaScript.现在,您需要做的就是为每个锚链接提供一个" targetblank" 类,并且链接应该在新选项卡中打开.