DOM 中的注释通过 Comment 类型表示。Comment 类型的节点具有以下特征:
nodeName 值为"#comment";
nodeValue 值为注释的内容;
parentNode 值为 Document 或 Element 对象;
不支持子节点。
Comment 类型与 Text 类型继承同一个基类(CharacterData),因此拥有除 splitText()之外Text 节点所有的字符串操作方法。与 Text 类型相似,注释的实际内容可以通过 nodeValue 或 data
属性获得。
注释节点可以作为父节点的子节点来访问。比如下面的 HTML 代码:
这里的注释是
let comment = div.firstChild;
alert(comment.data); // "A comment"
可以使用 document.createComment()方法创建注释节点,参数为注释文本,如下所示:
显然,注释节点很少通过 JavaScrpit 创建和访问,因为注释几乎不涉及算法逻辑。此外,浏览器不承认结束的标签之后的注释。如果要访问注释节点,则必须确定它们是元素的后代。
CDATASection 类型
CDATASection 类型表示 XML 中特有的 CDATA 区块。CDATASection 类型继承 Text 类型,因此拥有包括 splitText()在内的所有字符串操作方法。CDATASection 类型的节点具有以下特征:
nodeName 值为"#cdata-section";
nodeValue 值为 CDATA 区块的内容;
parentNode 值为 Document 或 Element 对象;
不支持子节点。
CDATA 区块只在 XML 文档中有效,因此某些浏览器比较陈旧的版本会错误地将 CDATA 区块解析为 Comment 或 Element。比如下面这行代码:
这里
在真正的 XML 文档中,可以使document.createCDataSection()并传入节点内容来创建CDATA 区块。
DocumentType 类型
DocumentType 类型的节点包含文档的文档类型(doctype)信息,具有以下特征:
nodeName 值为文档类型的名称;
nodeValue 值为 null;
parentNode 值为 Document 对象;
不支持子节点。
DocumentType 对象在 DOM Level 1 中不支持动态创建,只能在解析文档代码时创建。对于支持这个类型的浏览器,DocumentType 对象保存在 document.doctype 属性中。DOM Level 1 规定了DocumentType 对象的 3 个属性:name、entities 和 notations。其中,name 是文档类型的名称,entities 是这个文档类型描述的实体的 NamedNodeMap,而 notations 是这个文档类型描述的表示法的 NamedNodeMap。因为浏览器中的文档通常是 HTML 或 XHTML 文档类型,所以 entities 和notations 列表为空。(这个对象只包含行内声明的文档类型。)无论如何,只有 name 属性是有用的。
这个属性包含文档类型的名称,即紧跟在<!DOCTYPE 后面的那串文本。比如下面的 HTML 4.01 严格文档类型:
"http:// www.w3.org/TR/html4/strict.dtd">
对于这个文档类型,name 属性的值是"html":
alert(document.doctype.name); // "html"