html - 为什么不是由不正确的 html-tag 引起的错误?
问题描述
在 HTML 规范中有一个称为自定义元素的概念。这些元素的名称应该遵循一个明确的表达方式。但是,但是,在浏览器中打开编辑器后,我们可以安全地编写不遵循这些规则的元素,或者简单地使用不遵循这些规则的元素创建一个简单的页面。例如,<redcar> </redcar>
。为什么这是允许的并且不会导致任何错误?毕竟,如果我们这样写:<~hello> </~hello>
那么开始标签将被视为文本,而结束标签将被注释掉。在任何情况下,您都需要特定的链接来解释这种行为。
有效的自定义元素名称是满足以下所有要求的字符名称序列:
- 名称必须与PotentialCustomElementName产生式相匹配:
潜在自定义元素名称 ::=
[a-z] (PCENChar)* '-' (PCENChar)*
PCENChar ::=
"-" | "." | [0-9] | "_" | [a-z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
这使用 XML 规范中的 EBNF 表示法。[XML]
- 名称不得为以下任何一种:
annotation-xml
color-profile
font-face
font-face-src
font-face-uri
font-face-format
font-face-name
missing-glyph
解决方案
目前还不清楚您认为什么是错误。
HTML 解析主要面向永不抛出的原则,并将尝试将所有内容转换为有效的东西。
在您的特定情况下,您创建的是HTMLUnknownElement,这遵循规范:
HTML命名空间中名称为name的元素的元素接口确定如下:
如果名称是
applet
、bgsound
、blink
、isindex
、keygen
、multicol
、nextid
或spacer
,则返回 HTMLUnknownElement。如果name是
acronym
,basefont
,big
,center
,nobr
,noembed
,noframes
,plaintext
,rb
,rtc
,strike
, ortt
,则返回 HTMLElement。如果name是
listing
orxmp
,则返回 HTMLPreElement。否则,如果本规范定义了适合与本地名称name对应的元素类型的接口 ,则返回该接口。
如果其他适用规范为name定义了适当的接口,则返回它们定义的接口。
如果name是有效的自定义元素名称,则返回 HTMLElement。
返回 HTMLUnknownElement。
<redcar></redcar>
一路走来,直到第 7 条子弹。
推荐阅读
- json - 什么是正确的 FilterObject ORDS 语法?
- java - 从 oracle 获取用户 JAVA Web 应用信息
- javascript - 如何在使用 JavaScript 选择单选输入时更改 div 的颜色
- swagger-codegen - OpenAPI springboot 生成器不为模型中的可为空字段设置默认值
- python - 如何在python中复制excel线图
- html - Bootstrap 功能列表布局
- javascript - 当用户在浏览器中按下后退按钮时,Vue Axios 请求未使用正确的数据更新
- linux - 当“jenkins”用户执行带有正则表达式的任务时,ansible 会引发错误
- .htaccess - 如何正确处理 .htaccess 中的多个捕获组?
- typescript - TypeScript Blob:获取错误作为类型'{类型:字符串;}' 不可分配给“字符串”类型的参数。对于新的 Blob 声明