2011-05-22 20 views
26

我知道我可以通過document.doctypedocument.childNodes[0]訪問doctype對象,但我的問題是將doctype作爲字符串獲取。我可以通過撥打document.doctype返回<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">,在鉻合金和safari中做到這一點。但是在Firefox中,調用document.doctype將返回DocumentType對象。用Javascript獲取HTML的DocType爲字符串

有沒有辦法在所有瀏覽器中獲得doctype字符串,如在Chrome和Safari中一樣?

謝謝!

回答

68

在所有兼容的瀏覽器(包括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 
+11

值得注意的是,沒有DOCTYPE的文檔具有'document.doctype === null'。 – 2012-12-15 23:55:04

1

那是你在找什麼?

alert(document.doctype.publicId); 
+0

只返回' - // W3C // DTD HTML 4.01 // EN'。我需要整個DOCTYPE – matte 2011-05-22 15:48:16

+1

也許你需要做--- var doc ='<!DOCTYPE'+ document.doctype.name +'PUBLIC''+ document.doctype.publicId +'「」'+ document.doctype.systemId +'「> 「; – T1000 2011-05-22 15:55:11

2

串聯DocumentType.name.publicId.systemId。喜歡的東西:

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

我猜這不支持HTML5? – 2012-03-23 17:42:31

+0

@Kendall:它確實,但對於html5 afaik來說並不是很有用。 – KooiInc 2012-03-24 08:00:44

+3

我的意思是,它應該打印'<!DOCTYPE html>',但對於這個頁面(使用HTML5文檔類型),我得到'<!DOCTYPE html PUBLIC「」「」>'。 – 2012-03-25 05:15:11

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; 
}