Получить DocType HTML в виде строки с Javascript - PullRequest
29 голосов
/ 22 мая 2011

Я знаю, что могу получить доступ к объекту 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.

Есть ли способ получить строку типа документа во всех браузерах, как в Chrome и Safari?

Спасибо!

Ответы [ 5 ]

70 голосов
/ 15 апреля 2012

Во всех совместимых браузерах (включая 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) типов документов , например:

Объяснение кода:

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
45 голосов
/ 08 января 2015

Вы также можете использовать этот вкладыш, чтобы получить текущий тип документа. Это будет работать в любом современном браузере и IE 9 и выше .

new XMLSerializer().serializeToString(document.doctype);
3 голосов
/ 02 мая 2012
function get_doctype()
{
    var doctype = 
    '<!DOCTYPE ' + 
    document.doctype.name +
    (document.doctype.publicId?' PUBLIC "' +  document.doctype.publicId + '"':'') +
    (document.doctype.systemId?' "' + document.doctype.systemId + '"':'') + '>';
    return doctype;
}
2 голосов
/ 22 мая 2011

Конкатенация DocumentType.name, .publicId и .systemId. Что-то вроде:

'<!DOCTYPE '+ 
  DocumentType.name+' PUBLIC "'+ //maybe you should check for publicId first
  DocumentType.publicId+'" "'+
  DocumentType.systemId+'">'
1 голос
/ 22 мая 2011

Это то, что вы ищете?

alert(document.doctype.publicId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...