【问题标题】:</div></div> auto closing create child not sibling</div></div> 自动关闭创建子不是兄弟
【发布时间】:2013-07-24 17:16:03
【问题描述】:

我真的很喜欢对使用普通 &lt;tag/&gt; 格式的标签使用“短关闭”,但不幸的是在浏览器(即 chrome)中使用这种方法会导致非常意外的行为。

当我在文档中时:

<div/><div/> 

它被解释为

<div>
   <div></div>
<div>

无论我使用什么 DOCTYPE (XHTML) 或 HTML5,我都会以错误的方式得到它。 我也在命名空间 &lt;widget:aSampleWidgetA/&gt; &lt;widget:aSampleWidgetB/&gt; 中使用这个“符号”来自定义标签,这也引入了这个问题。

我不想使用完整的结束符号,因为它会在代码中造成很多视觉混乱。 有没有办法强制浏览器将这些标签解析为正确的 XML?

【问题讨论】:

  • 虽然具体包含结束 div 标签可能需要更多代码,但我认为对于可能在代码上工作的其他开发人员来说可能更清楚,因为这是惯例。

标签: google-chrome browser xml-parsing custom-tag


【解决方案1】:

抱歉,我找不到很好的文档,但我怀疑这是因为 div 不是有效的自结束标记。查看XHTML DTD,空标签专门标记为EMPTYdiv 不是,因此Chrome 的行为就像是html5,其中结束标签可以省略并采取最佳猜测关闭它们的位置。

或者,如果您不喜欢 html 的外观,也许您可​​能更喜欢 hamljade 模板之类的东西。

【讨论】:

  • 为了扩展这一点,可以通过 JS 中的文档重写或通过非标准模式来实现,但由于 没有标记为单例,所以不能。第三种选择是不使用标准 HTML。一个 XML 文档和一个 CSS 包含来显示它,在大多数情况下应该可以工作。
【解决方案2】:

有一种方法可以让浏览器(IE8 及以下版本除外)将标记解析为 XML。您需要使用正确的 XHTML 内容类型 application/xhtml+xml 来提供它。

Doctype 与解析无关,它只影响渲染模式(标准或怪癖)。当用作text/html 时,所有页面都将由 HTML 规则(现代浏览器的 HTML5 规则)解析,这实际上意味着“自关闭”语法中的斜线将被忽略,并且元素的能力是 ' self-closed' 实际上在解析器中是硬编码的。 Divs 和自定义标签没有这个能力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 2016-04-19
    • 1970-01-01
    • 2019-08-10
    • 2016-02-18
    相关资源
    最近更新 更多