因此,假设(在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-shimdocument.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/

10-13 01:39