我注意到 jQuery(或者是 Firefox)将改变我的一些 <span class="presentational"></span> into <span class="presentational" />

现在我的问题是,这样写我的标记可以吗?任何浏览器都会卡住吗?

就个人而言,我认为这样做看起来更干净 <span class="presentational" /> 如果它是空的。

有帮助吗?

解决方案

我假设您的问题与您在 Firefox 中查看源代码时自关闭元素上的红色尾部斜杠有关。如果是这样,那么您就陷入了浏览器制造商与浏览器制造商之间最激烈但同时又消极激进的辩论之一。Web 开发者战争。XHTML 不仅仅是文档的标记。它还涉及如何通过网络提供文档。

在我开始之前;我正在努力不偏袒任何一方。

XHTML 1.1 规范规定 Web 服务器应该以 application/xhtml+xml 的内容类型提供 XHTML。Firefox 将那些尾部斜杠挑出为无效,因为您的文档被用作 text/html 而不是 application/xhtml+xml。以这两个例子为例;相同的标记,一个作为 application/xhtml+xml,另一个作为 text/html。

http://alanstorm.com/testbed/xhtml-as-html.php

http://alanstorm.com/testbed/xhtml-as-xhtml.php

Firefox 将元标记中的尾部斜杠标记为对于使用 text/html 提供的文档无效,而对于使用 application/xhtml+xml 提供的文档有效。

为什么这是有争议的

对于浏览器开发人员来说,XHT​​ML 的要点是您可以将文档视为 XML,这意味着如果有人向您发送无效的内容,规范表明您不必解析它。因此,如果文档作为 application/xhtml+xml 提供并且具有格式不正确的内容,则允许开发人员说“不是我的问题”。你可以在这里看到它的实际效果

http://alanstorm.com/testbed/xhtml-not-valid.php

当文档以 text/html 形式提供时,Firefox 会将其视为普通的旧 HTML 文档,并使用宽容、修复它、解析例程

http://alanstorm.com/testbed/xhtml-not-valid-as-html.php

因此,对于浏览器制造商来说,将 XHTML 用作 text/html 是可笑的,因为浏览器的渲染引擎从未将其视为 XML。

几年前,网络开发人员不仅仅希望成为标签猴子(免责声明:我(包括我自己)开始寻找开发最佳实践的方法,这些最佳实践不涉及三次嵌套表,但仍然提供引人注目的设计体验。他们/我们锁定了 XHTML/CSS,因为 W3C 表示这就是未来,唯一的其他选择是单一供应商(微软)控制事实上的标记规范的世界。真正的邪恶是 单一供应商, ,而不是微软。我发誓。

那么争议在哪里呢?application/xhtml+xml有两个问题。第一个是 Internet Explorer。IE 中有一个遗留错误/功能,其中作为 application/xhtml+xml 的内容将提示用户下载文档。如果您尝试使用 IE 访问上面列出的 xhtml-as-xhtml.php,则可能会发生这种情况。这意味着如果你想使用application/xhtml+xml,你必须 浏览器嗅探 IE, ,检查 Accepts 标头并仅将 application/xhtml+xml 提供给接受它的浏览器。这是 不那么微不足道 这听起来很正确,但也违背了 Web 开发人员所追求的“一次编写”原则。

第二个问题是 XML 的严酷性。这又是容易引发问题的问题之一,但有些人认为单个错误标签或单个字符编码不正确不应导致用户看不到他们想要的文档。换句话说,是的,规范规定,如果 XML 格式不正确,您应该停止处理 XML,但用户并不关心规范,他们关心的是他们的猫的网站已损坏。

XHTML 1.0(不是 1.1)规范说 XHTML 文档更加雪上加霜。 可能 作为文本/html,假设一定 兼容性指南 被关注。像 img 标签自动关闭之类的事情。这里的关键词是 可能. 。在 RFC发言, 可能表示可选。Firefox 选择不将使用 XHTML doctype 提供的文档视为 XHTML,而是将使用 text/html 内容类型的文档视为 XHTML。然而,W3C 验证器会很乐意将这些文档报告为有效。

我会让读者思考一种写文档来定义这个词的含义的文化的同时奇迹/恐怖 可能.

向前进

最后,这就是整个 HTML 5 事情是关于。XHTML 成为了一个政治上的烫手山芋,以至于一群想要推动该语言向前发展的人决定走向另一个方向。他们制定了 HTML 5 规范。W3C 目前正在对此进行讨论,预计将在未来十年内完成。与此同时,浏览器供应商正在从正在进行的规范中挑选和选择功能并实施它们。

评论更新

在评论中, 亚历克斯 指出如果您要嗅探某些内容,则应该检查 Accept 标头以查看用户代理是否接受 application/xhtml+xml。

这是绝对正确的。一般来说,如果您要嗅探,请嗅探功能,而不是浏览器。

其他提示

这是除了其他的答案:在IE中,具有元件,诸如在加价<span />将导致与在JavaScript DOM遍历方法各种问题。看看下面的XHTML文档:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Test</title>
    <script type="text/javascript">
        function show() {
            var span = document.getElementById("span");
            alert(span.innerHTML);
        }
    </script>
</head>
<body onload="show();">
<p id="p1">Paragraph containing some text followed by
           an empty span<span id="span"/></p>
<p id="p2">Second paragraph just containing text</p>
</body>
</html>

我们的想法是,当页面加载时,JavaScript将获得空跨度参考,并显示其HTML内容。这将是一个空字符串,对不对?不是在IE不会。在IE中,你得到整个文档中的跨度之后的所有内容:

</P>
<P id=p2>Second paragraph just containing text</P>

另外,第二<p>跨度的childNodes集合中显示出来。就在同<p>也是人体的childNodes集合中,这意味着节点可以有效地拥有多个父。这不是依赖于遍历DOM脚本非常好的消息。

我也博客了解这个

是。它是。这将导致在某些情况下,对旧的浏览器的问题。

<script type='text/javascript' src='script.js' />

在这种情况下,老的浏览器可能不明白,<script>标签已经结束。

担任应用/ XHTML + xml的,<跨度/>表示创建一个跨度元件没有内容。

担任的text / html,<跨度/>表示创建一个跨度元件,其中所述元素的内容按照这个标签,直到标记遇到,或另一个标记(或EOF),其隐式地关闭元件是遇到。即,在这种情况下<跨度/>表示相同<跨度>

除了:HTML 5定义既与HTML和XHTML序列化,所以它不会影响这个问题的一种方式或另一种。这确实需要,比如XHTML 1.1,XHTML是被当作application / xhtml + xml,不像XHTML 1.0。在虽然效果,因为所有的浏览器处理XHTML的任何版本为text / HTML作为标记汤这改变不了什么。

另外值得注意的是,该文档类型之前<?xml ...?>声明抛出IE到怪异模式。

请参阅关于该主题的音符形成XHMTL工作组: HTTP:// www.w3.org/TR/xhtml-media-types/

在短 - 这是好的,如果你的XHTML将被视为XHTML。如果你要假装它是HTML(你需要做的,如果你想让它由Internet Explorer(包括版本8,最迟在写作的时候加载),那么你必须跳火圈)。

在篮球足够烦人,我建议大多数人坚持HTML 4.01。

通常它不是使用简写空元素的问题,但也有一些例外,其中它可能会导致问题。

<script>是需要与</script>被关闭,以避免问题的一个重要之一。

另一个是<meta>与写为<meta></meta>代替<meta />蜘蛛的效果要好得多

不完全的问题,但相关的,在格式方面,IE的版本具有与刚刚空元素如<div></div><div />问题。在这种情况下,<div>&nbsp;</div>需要保持格式。

应该明确地说,在HTML中没有自我封闭的标签,所以每当浏览器决定把你的XHTML作为HTML,它不会承认该标签被关闭。不是为没有在HTML被关闭,像<img>,但显然不好与像<span>标签的标签问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top