为什么 script 标签不能写成自关闭形式
今天早上在 Stack Overflow 看到了这个问题: Why don't self-closing script tags work? 。答案给出的解释是,在 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
关键字的标签,也就不可能使用自关闭的写法。
总结一下:有空看看 Stack Overflow 还是挺有意思的。学习 DTD 的语法,并且看看 XHTML 1.0 Strict DTD 也会帮助你增加对 XHTML 的理解。
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Cat Chen 来源: Cat in dotNET
- 标签: script 关闭
- 发布时间:2011-07-12 13:40:27
- [66] Go Reflect 性能
- [66] Oracle MTS模式下 进程地址与会话信
- [65] 如何拿下简短的域名
- [59] IOS安全–浅谈关于IOS加固的几种方法
- [59] android 开发入门
- [59] 图书馆的世界纪录
- [58] 【社会化设计】自我(self)部分――欢迎区
- [53] 视觉调整-设计师 vs. 逻辑
- [47] 界面设计速成
- [47] 读书笔记-壹百度:百度十年千倍的29条法则