我正在写一个简单的网页。我想在页面内打印<abc>
和<1234>
。为什么<1234>
不打印<abc>
?我知道<abc>
是无效的标签,这就是为什么它没有呈现。但是<1234>
呢?
答案 0 :(得分:2)
答案 1 :(得分:2)
这取决于浏览器将HTML解析为显示为网页的格式。
通常,HTML标记必须以字母开头。因此,浏览器尝试解析为有效标记(因此隐藏它),但不识别&lt; 1234&gt;因此保持不变。
编辑:
正如@Arkana在下面指出的那样,我在HTML规范中没有看到任何特别禁止使用数字启动HTML标记的内容。我最好的猜测是,因为no (currently valid) HTML tags actually do start with a number,浏览器的解析器根据HTML4规范IDs and Names follow的相同规则忽略这些标记。
答案 2 :(得分:1)
在XHTML和HTML5中(即使在HTML序列化中),<abc>
和<123>
都无效。在HTML 4.01中,<123>
有效,但不推荐,它只是表示这五个数据字符。
浏览器中最重要的是它们如何解析HTML文档。在HTML5 CR中有一个尝试半正式的描述,但它有点难读。底线是<
触发特殊解析:如果下一个字符是字母,则数据被解析为HTML标记;否则,<
以及之后的数据将被视为普通数据字符。
当解析了<abc>
之类的标签时,现代浏览器会在文档树中构建一个元素节点 - 即使标签无效且标签名称根本不为浏览器所知。如果没有结束标记<abc>
,则该节点包含文档中的所有其余标记。但是对于名称未知的元素节点,没有默认样式,也没有默认操作。你不会注意到它的存在,除非你试图用它做一些事情(比如把abc { color: solid red }
放在样式表中)。
从技术上讲,可以说差异的原因是“a”是名称起始字符(可能在标记名称中显示为第一个字符),而“1”则不是。
最安全的做法是始终将内容中的“&lt;”字符转义(style
和script
和xmp
元素除外,这些元素具有自己的规则){{1 }}。无需转义“&gt;”,但如果需要,为了对称,您可以将其转义为<
。
答案 3 :(得分:0)
无法识别的元素被添加到DOM中以实现向前兼容性(可以使用CSS / JS增强它们)。元素名称可能不以数字开头,因此它们不会添加到DOM中,错误恢复会将它们视为文本。
如果您想将<
和>
作为数据而不是标记,请使用<
和>
。