Получить DocType HTML как строку с Javascript
Я знаю, что я могу получить доступ к объекту doctype через document.doctype
или document.childNodes[0]
, но моя проблема заключается в получении doctype в виде строки. Я могу сделать это в chrome и safari, вызвав document.doctype
, который возвращает <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
. Однако в Firefox вызов document.doctype
возвращает объект DocumentType.
Есть ли способ получить строку 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 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 a public document type.
#>Prefix PUBLIC
!node.publicId && node.systemId
# If there no publicId, but a systemId, prefix SYSTEM
node.systemId # Append this if present
Ответ 2
Вы также можете использовать этот один вкладыш для получения текущего типа doctype. Это будет работать в любом современном браузере и IE 9 и выше.
new XMLSerializer().serializeToString(document.doctype);
Ответ 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;
}
Ответ 4
Конкатенация DocumentType.name
, .publicId
и .systemId
. Что-то вроде:
'<!DOCTYPE '+
DocumentType.name+' PUBLIC "'+ //maybe you should check for publicId first
DocumentType.publicId+'" "'+
DocumentType.systemId+'">'
Ответ 5
Это то, что вы ищете?
alert(document.doctype.publicId);