HTML5 可以省略结束标签(script标签不能自闭合!)

本来是个非常基础的问题,之所以要写篇博客是因为今天发现<script>标签不能自闭合

意思就是<script src="xxx" type="text/javascript"/>是不合法的

必须写成<script src="xxx" type="text/javascript"></script>的形式否则js文件的内容不起作用

本来我以为HTML5非常宽松,浏览器支持也非常强大(事实也是如此)这点小事不会出问题吧,

但今天确实出现了这个问题只因为<script>写成了自闭合的形式

下边是我在网上查到的原因:

在 XHTML 的标准里面规定非 EMPTY 标签不能使用自关闭形式。注意这里使用的是全大写的 EMPTY ,所以我不把它翻译为「空白」。
那么 EMPTY 到底是什么呢?写过 DTD 的人应该知道它是个关键字,用来指明一个标签的内容必须是空白,而不能包含文本内容或子节点。看看具体的例子就很容易明白了:
<!ELEMENT img EMPTY>
<!ATTLIST img %attrs;
src %URI; #REQUIRED
alt %Text; #REQUIRED
longdesc %URI; #IMPLIED
height %Length; #IMPLIED
width %Length; #IMPLIED
usemap %URI; #IMPLIED
ismap (ismap) #IMPLIED
>
这是 img 标签的定义。 ELEMENT 关键字说明它是一个元素, EMPTY 关键字说明它的内容必须是空白。因此,我们可以使用自关闭形式:
<img src="image.png" alt="some image" />
留意 ATTLIST 里面声明了两个属性是 #REQUIRED 的,所以必须提供。
接下来我们再看看 script 标签的定义:
<!ELEMENT script (#PCDATA)>
<!ATTLIST script
id ID #IMPLIED
charset %Charset; #IMPLIED
type %ContentType; #REQUIRED
language CDATA #IMPLIED
src %URI; #IMPLIED
defer (defer) #IMPLIED
xml:space (preserve) #FIXED 'preserve'
>
可以看到 script 标签通过 (#PCDATA) 声明了它的内部允许包含 CDATA 数据,因此它不是一个带 EMPTY 关键字的标签,也就不可能使用自关闭的写法。

所以就这样了,不知道类似于<script>的不能自闭合的标签还有什么,欢迎大家补充!

猜你喜欢

转载自blog.csdn.net/q5706503/article/details/82817641