jQuery проверить тип документа

If doctype is <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    // do something
else 
    // do something

Как?

Спасибо.


person Happy    schedule 15.06.2010    source источник


Ответы (5)


Хорошо, я вернулся после тестирования в IE, Chrome, Firefox и Opera. IE предоставит вам полный тип документа со следующим фрагментом кода:

var doctype = document.documentElement.previousSibling.nodeValue;
// -> DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"

К сожалению, это, вероятно, неверно, так как Chrome, Firefox и Opera возвращают null вместо nodeValue. Поскольку ни один из них не поддерживает outerHTML, я не могу придумать способ получить полный тип документа, но вы можете получить отдельные части:

 var doctype = document.documentElement.previousSibling;

 console.log(doctype.systemId)
 // -> http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd

 console.log(doctype.publicId)
 // -> -//W3C//DTD XHTML 1.0 Strict//EN

Однако это не работает в IE, но разобрать их будет несложно. Вы можете использовать оператор if, чтобы проверить, что nodeValue не является null, и вернуться к проверке systemId или publicId.

Сценарий, используемый для запуска тестов: http://jsfiddle.net/Cwb8q/

person Andy E    schedule 15.06.2010
comment
просто из любопытства: попробуйте $(document).siblings(); -› ups - person jAndy; 15.06.2010
comment
@jAndy: у меня ошибка в Chrome. $(document.documentElement).siblings() не выдает ошибку, но не содержит тип документа в результатах. - person Andy E; 15.06.2010
comment
's head: Я также получаю сообщение об ошибке, это была часть ups. Либо г-н Резиг забыл проверить это, либо он просто предположил, что этот подход настолько бесполезен, что никто никогда не будет пробовать :) - person jAndy; 15.06.2010
comment
@jAndy: Я думаю, что это, вероятно, комбинация того и другого, вероятно, ему это не приходило в голову. - person Andy E; 15.06.2010

Вы можете использовать объект jQuery.support для проверки определенных функций браузера (например, BoxModel) и работает против них.

person Fermin    schedule 15.06.2010
comment
Проверка реальных возможностей (а не заявленных возможностей) действительно единственный способ сохранить здравомыслие. - person Piskvor left the building; 15.06.2010

document.doctype и document.firstChild оба возвращают тип документа, хотя я не знаю, насколько широко они поддерживаются.

person zrajm    schedule 28.03.2013

Попробуйте использовать атрибут this.document.doctype. Если не объявлен, результатом будет null, в противном случае результатом будет объект с типом документа.

person Paulo Guedes    schedule 27.02.2012

Вы можете попробовать:

вар документ = $ ("DOCTYPE");

person Digital Human    schedule 15.06.2010
comment
Это не работает. Использование $('DOCTYPE') всегда возвращает [], а правильное включение восклицательного знака, т. е. запись $('!DOCTYPE'), приводит к синтаксической ошибке: Error: Syntax error, unrecognized expression: !DOCTYPE. - person zrajm; 28.03.2013