Javascriptを使用してHTMLのDocTypeを文字列として取得する 質問する

Javascriptを使用してHTMLのDocTypeを文字列として取得する 質問する

document.doctypeまたは を介し​​て doctype オブジェクトにアクセスできることはわかっていますdocument.childNodes[0]が、問題は doctype を文字列として取得することです。document.doctypeを返す を呼び出すことで、Chrome と Safari でこれを行うことができます<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">。ただし、Firefox では、 を呼び出すとdocument.doctypeDocumentType オブジェクトが返されます。

Chrome や Safari などのすべてのブラウザで doctype 文字列を取得する方法はありますか?

ありがとう!

ベストアンサー1

すべての対応ブラウザ(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 + '"' : '')
         + '>';

このメソッドは正しい文字列を返します有効な(HTML5)DOCTYPE例:

  • <!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

おすすめ記事