首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查DOM节点是否是表示doctype声明的节点?

如何检查DOM节点是否是表示doctype声明的节点?
EN

Stack Overflow用户
提问于 2011-10-28 18:31:24
回答 2查看 453关注 0票数 8

因此,假设(在IE8中)我们有一个document

现在,我们通常可以假设document.childNodes[0]是doctype。所以

var doctype = document.childNodes[0]

现在,我们如何确认而不是假设它是doctype呢?

代码语言:javascript
复制
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

多姆 get's document.doctype in IE8通过返回document.childNodes[0]

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-24 09:50:09

我发现在IE7和IE8中,注释的.innerHTML属性总是完整的"<!--comment here-->",而对于doctype节点,它是""。即使是空注释,.innerHTML也是"<!---->"

基于此,我创建了:

代码语言:javascript
复制
function isDocType(node) {
    return node && (
    node.nodeType === 10 || (node.nodeType === 8 && "innerHTML" in node && node.innerHTML === ""));
}

使用测试页:

代码语言:javascript
复制
<!-- comment1 -->
<!-- comment2 -->
<!---->
<!-- -->
<!-- <!DOCTYPE html> -->

通过isDocType运行doctype和注释提供:

代码语言:javascript
复制
LOG: true 
LOG: false 
LOG: false 
LOG: false 
LOG: false 
LOG: false

请参阅http://jsfiddle.net/AEYt4/

票数 2
EN

Stack Overflow用户

发布于 2011-10-30 11:58:39

IE8说不行。:(

不过,说真的,除了黑客和假设之外,没有干净的方法。

正如注释中所建议的,您可以假设注释不是doctype,例如

doctype.data.indexOf("<!DOCTYPE html") !== -1 && doctype.data.indexOf(">") !== -1

或者对DOM结构进行假设

我认为只有注释节点(以及解析器作为注释节点处理的任何内容,例如xml声明)才能在doctype之前进行。

因此,您只需遍历document.childNodes中的注释节点,直到找到与上述regexp匹配的节点为止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7933344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档