因此,假设(在IE8中)我们有一个document
。
现在通常可以假定document.childNodes[0]
是doctype。所以var doctype = document.childNodes[0]
现在我们如何确认而不是假设它是doctype?
doctype.nodeType === Node.COMMENT_NODE;
doctype.tagName === "!"; // same as a comment
doctype.data.indexOf("DOCTYPE ") > -1; // same as any comment containing the word DOCTYPE.
doctype === document.doctype; // false, document.doctype is undefined in IE8
除了假设之外,我应该如何知道给定节点是否为doctype?
对于那些不熟悉DOM4的人,请看看
DocumentType
只需返回
document.doctype
,即可在IE8中获得DOM-shim的document.childNodes[0]
最佳答案
我发现在IE7和IE8中,用于注释的.innerHTML
属性始终是完整的"<!--comment here-->"
,对于doctype节点,它是""
。即使是空评论,.innerHTML
也是"<!---->"
因此,基于此我创建了:
function isDocType(node) {
return node && (
node.nodeType === 10 || (node.nodeType === 8 && "innerHTML" in node && node.innerHTML === ""));
}
随着测试页:
<!-- comment1 -->
<!-- comment2 -->
<!---->
<!-- -->
<!-- <!DOCTYPE html> -->
通过
isDocType
运行doctype和注释可以得到:LOG: true
LOG: false
LOG: false
LOG: false
LOG: false
LOG: false
参见http://jsfiddle.net/AEYt4/
关于html - 如何检查DOM节点是否代表doctype声明?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7933344/