DOCTYPE宣言を取得する

DOCTYPE宣言を取得するには、document.doctypeプロパティを使用します。

  • ※ IE8以下では非対応のためnullが返ります。

構文

var docType = document.doctype;

戻り値

NodeListまたはDOCTYPE宣言のタグを文字列で返します。

サンプルコード

JavaScript

var docType = document.doctype;

console.log(docType);

取得可能範囲

NodeListは次の赤い部分を取得できます。

プロパティ名 取得範囲
name <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
publicId <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
systemId <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

JavaScript

var docType = document.doctype;

alert('name : ' + docType.name);
alert('publicId : ' + docType.publicId);
alert('systemId : ' + docType.systemId);

DOCTYPE宣言の情報を整理して取得

次のように関数化して整理した情報を取得する方法もあります。

サンプルコード

JavaScript

var docTypeData = function(targetHTML) {

	var docTypeNode = document.doctype,
	    results     = {
	    name     : '',
	    publicId : '',
	    systemId : '',
	    language : '',
	    type     : ''
	};

	if (targetHTML) docTypeNode = targetHTML;
	if (docTypeNode) return results;

	if (typeof docTypeNode === 'string') {
		var nameMatch = docTypeNode.match(/(html)/i);
		if (nameMatch && nameMatch[1]) {
			results.name = nameMatch[1].toLowerCase();
		}

		var publicIdMatch = docTypeNode.match(/"(-[^"]+)"/i);
		if (publicIdMatch && publicIdMatch[1]) {
			results.publicId = publicIdMatch[1];
		}

		var systemIdMatch = docTypeNode.match(/"(http[^"]+)"/i);
		if (systemIdMatch && systemIdMatch[1]) {
			results.systemId = systemIdMatch[1];
		}
	} else {
		results.name     = docTypeNode.name;
		results.publicId = docTypeNode.publicId;
		results.systemId = docTypeNode.systemId;
	}

	if (results.publicId) {
		var typeMatch = results.publicId.match(/(transitional|strict|frameset)/i);

		if (typeMatch && typeMatch[1]) {
			results.type = typeMatch[1];
		}

		var languageMatch = results.publicId.match(/(x?html) ([0-9\.]+)/i);

		if (languageMatch && languageMatch[1]) {
			results.language = languageMatch[1];

			if (languageMatch[2]) {
				results.language += ' ' + languageMatch[2];
			}
		} else {
			var metaElement = document.getElementsByTagName('meta'),
			    isHTML5     = false;

			for (var i = 0, len = metaElement.length; i < len; i++) {
				if (metaElement[i].hasAttribute('charset')) {
					isHTML5 = true;
					break;
				}
			}

			if (isHTML5) results.version = '5';
		}
	}

	return results;
};

使い方

JavaScript

var docTypeData = document.docTypeData();

console.log(docTypeData);

JavaScript逆引きリファレンス一覧へ戻る