让我们说我们有这个标记:
<ul>
<li>
<span></span>
</li>
</ul>
阅读我们的specifications for ul:
内容模型:
零或更多li和脚本支持元素。
内容模型的语义部分说,(强调我的):
内容模型
必须包含哪些内容的规范性描述为 子元素 和后代 。
我肯定会想到这个错误,但我无法让这两个人计算。由于 span 不是“零或更多li元素”的一部分,而且它是 ul 的后代。
如果规范说:“必须包含哪些内容作为元素的子项的规范性描述。”我会得到它,但这可能会与规范的其他部分一起崩溃。
我的问题是如何解释这个。
添加更多上下文。 ul 只能将 li 作为子项。但是从上面来看,如果一个人忘记了所有关于HTML等的知识,我会把它解释为两个中的一个:
“零或更多”后者更强大。
答案 0 :(得分:3)
3.2.3元素定义中引用的描述相当松散甚至误导。下一部分3.2.4内容模型描述了内容模型的真正含义:“本规范中定义的每个元素都有一个内容模型:元素预期内容的描述。 HTML元素必须具有与元素内容模型中描述的要求相匹配的内容。元素的内容是DOM中的子元素,模板元素除外,其中子元素是模板内容中的子元素。“
因此,内容模型根据子项指定允许和所需内容(尽管并非所有元素都具有所需内容),这意味着子节点。这包括(如果适用)元素childen和文本节点子节点(例如,某些元素仅允许文本作为内容)。
这意味着ul
元素可能只有li
和script
元素作为子元素。 li
元素具有自己的内容模型,这些内容模型相当宽松。没有必要的内容; HTML5中允许使用<ul></ul>
。