XHTML Strict 1.0 - target =“_ blank”无效?

时间:2011-01-12 08:09:23

标签: html validation target w3c xhtml-1.0-strict

我刚用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>

target =“_ blank”无效..但我需要目标为空白,以便在浏览器中打开一个新标签,以便用户不会离开主页面。

我该怎么办?为什么这无效?

8 个答案:

答案 0 :(得分: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。

答案 1 :(得分:9)

你应该问自己的问题不是如何“规避”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">

另见why was target removed from xhtml 欢呼J

答案 2 :(得分:7)

我建议添加目标属性。由于可访问性原因,它被删除了,当页面决定我的浏览器标记打开时,我不喜欢它。当然,如果你愿意,你可以自由地这样做。我将向您展示Darin上面提到的一种JavaScript方法,它允许您验证为XHTML 1.0 Strict或XHTML 1.1:

HTML code:

<!-- 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>

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';
    }
}

当然,你可以省略window.onload,如果你已经将它包含在其他地方,但我建议使用它(或使用其他加载函数,如JQuery的$(document).ready();),以便在页面加载完成后加载JavaScript 。现在,您需要做的就是为每个锚链接提供一个“targetblank”类,并且链接应该在新选项卡中打开。

答案 3 :(得分:3)

对于这种情况,我使用一个简单的jQuery解决方案,使用XHTML Strict对其进行验证,并允许出现新的窗口。

<a href="http://www.example.com" class="linkExternal">Example URL</a>

<script type="text/javascript">
$(function(){
    $('a.linkExternal').on('click',function(e){
        e.preventDefault();
        window.open($(this).attr('href'));
    });
});

答案 4 :(得分:1)

虽然我不能说为什么此属性被视为无效作为解决方法,但如果您希望您的网站验证为XHTML严格,则可以使用javascript添加此属性。

答案 5 :(得分:0)

试试这个:

<a href="#" onclick="window.open('urlgoeshere');">Link</a>

答案 6 :(得分:0)

在XHTML STRICT中使用目标的最佳方法是:onclick="target='_blank';"

<a href="http://botje.tnhteam.com/" onclick="target='_blank';">Botje is overal</a>

示例: click the STRICT button at the bottom

如果您需要_self或任何其他目标,您可以将_blank更改为_self例如:onclick="target='_self';"

我希望这个答案对你们中的一些人有所帮助......

答案 7 :(得分:-1)

我更喜欢这个

<a href="http://myurl.com" onclick="this.target='_blank'">Anchor text</a>