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