27

我刚刚使用 w3c 验证器服务验证了我的实际 XHTML Strict 1.0 文档。它说,

<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" 无效.. 但我需要目标空白,以便在浏览器中打开一个新选项卡,以便用户不会离开主页。

我能做些什么?为什么这无效?

4

8 回答 8

17

您可能想查看 W3 常见问题解答:http ://www.w3.org/MarkUp/2004/xhtml-faq#target

为什么从 XHTML 1.1 中删除了 target 属性?

不是。XHTML 1.0 有三个版本:strict、transitional 和 frameset。在 XML 允许的情况下,所有这三个都故意尽可能接近 HTML 4.01。XHTML 1.1 是 XHTML 1.0 strict 的更新版本,没有任何版本的 HTML strict 包含 target 属性。其他两个版本,transitional 和 frameset,没有更新,因为没有什么可更新的。如果要使用目标属性,请使用 XHTML 1.0 过渡。

于 2011-01-12T08:22:55.360 回答
9

您应该问自己的问题不是如何“规避” Strict 的限制,而是为什么要首先使用 XHTML Strict 1.0?

在您的情况下,我会简单地使用 Transitional 作为 DTD。当然,除非您正在为特定的操作系统进行开发,例如不允许在汽车系统、物联网或更多奇特的设备中打开多个窗口。这就是 HTML Strict 中没有 target 的原因。严格是故意限制。

但是,当您似乎为“正常”使用而开发时,您的文档类型应该反映这一点,并且您应该使用:

<!DOCTYPE html> 

另请参阅为什么从 xhtml 欢呼 J中删除目标

于 2013-03-09T10:56:15.180 回答
7

我建议不要添加目标属性。由于可访问性原因,它被删除了,当页面决定的浏览器标签如何打开时,我不喜欢它。当然,如果您愿意,您可以自由地这样做。我将向您展示 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>

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's $(document).ready();),以便在页面完成加载时加载 JavaScript。现在,您需要做的就是给每个锚链接一个“ targetblank”类,并且链接应该在新选项卡中打开。

于 2011-01-13T05:34:20.963 回答
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'));
    });
});
于 2012-07-10T07:56:17.223 回答
1

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

于 2011-01-12T08:12:03.827 回答
1

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

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

示例:单击底部的 STRICT 按钮

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

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

于 2014-09-04T07:28:09.597 回答
0

尝试这个:

<a href="#" onclick="window.open('urlgoeshere');">Link</a>
于 2012-10-18T21:30:30.490 回答
-1

我更喜欢这个

<a href="http://myurl.com" onclick="this.target='_blank'">Anchor text</a> 
于 2013-09-19T14:10:27.020 回答