使用Javascript获取HTML的DocType作为字符串

时间:2011-05-22 15:41:06

标签: javascript dom

我知道我可以通过document.doctypedocument.childNodes[0]访问doctype对象,但我的问题是将doctype作为字符串。我可以通过调用返回document.doctype的{​​{1}}在chrome和safari中执行此操作。但是在Firefox中,调用<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">会返回DocumentType对象。

有没有办法在Chrome和safari中获取所有浏览器中的doctype字符串?

谢谢!

5 个答案:

答案 0 :(得分:70)

在所有兼容的浏览器(包括Chrome / Safari)中,document.doctype也会返回DocumentType个对象。以下代码可用于生成有效的DOCTYPE字符串。

var node = document.doctype;
var html = "<!DOCTYPE "
         + node.name
         + (node.publicId ? ' PUBLIC "' + node.publicId + '"' : '')
         + (!node.publicId && node.systemId ? ' SYSTEM' : '') 
         + (node.systemId ? ' "' + node.systemId + '"' : '')
         + '>';

此方法返回valid (HTML5) doctypes的正确字符串,例如:

  • <!DOCTYPE html>
  • <!DOCTYPE html SYSTEM "about:legacy-compat">
  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

代码说明:

node.name      # Holds the name of the root element, eg: HTML / html
node.publicId  # If this property is present, then it's a public document type.
               #>Prefix PUBLIC
!node.publicId && node.systemId
               # If there's no publicId, but a systemId, prefix SYSTEM
node.systemId  # Append this if present

答案 1 :(得分:44)

您也可以使用此一个衬垫来获取当前的doctype。这可以在any modern browser and IE 9 and higher中使用。

new XMLSerializer().serializeToString(document.doctype);

答案 2 :(得分:3)

function get_doctype()
{
    var doctype = 
    '<!DOCTYPE ' + 
    document.doctype.name +
    (document.doctype.publicId?' PUBLIC "' +  document.doctype.publicId + '"':'') +
    (document.doctype.systemId?' "' + document.doctype.systemId + '"':'') + '>';
    return doctype;
}

答案 3 :(得分:2)

连接DocumentType.name.publicId.systemId。类似的东西:

'<!DOCTYPE '+ 
  DocumentType.name+' PUBLIC "'+ //maybe you should check for publicId first
  DocumentType.publicId+'" "'+
  DocumentType.systemId+'">'

答案 4 :(得分:1)

你在找什么?

alert(document.doctype.publicId);