Нужна помощь: jquery добавить doctype в html

Вот моя ситуация:

  1. Я редактирую таблицу стилей CSS приложения.
  2. Я могу ТОЛЬКО редактировать таблицу стилей CSS (если я не могу творчески добавить другой файл с помощью CSS или, возможно, добавить небольшой оператор jQuery prepend в существующий .js)
  3. Приложение совместимо ТОЛЬКО с ie6, ie7 и ie8. Они никогда не используют FireFox, и это не вариант.

Ищу помощь с:

1) Я думаю, что мне нужно использовать jQuery для "prepend/prependTo" "doctype" на

html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"

Без !doctype он переводит ie8 в quirksmode и, конечно же, не принимает никаких стилей, таких как "input[type=checkbox]"

Раньше я не использовал prepend. Можете ли вы помочь мне с полным и правильным синтаксисом, как сделать следующее:

ТЕКУЩИЙ: <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

ЖЕЛАЕТСЯ: <doctype html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

У меня это еще не сработало $("html ").prepend("doctype ")


person caroline    schedule 20.12.2010    source источник
comment
Это действительно нужно исправить, когда страница отправляется клиенту, а не в JavaScript.   -  person Nick Craver    schedule 21.12.2010
comment
Я понимаю важность этого, но в настоящее время это невозможно. Приложение, по-видимому, работает так уже 7 лет, и у них нет бюджета, чтобы исправить или коснуться определенных вещей. Очень жаль, я знаю. Так что, если есть исправление, с помощью которого мы могли бы это исправить, я был бы очень благодарен за небольшую помощь.   -  person caroline    schedule 21.12.2010
comment
IE уже находится в режиме quirksmode к тому времени, когда это запускается... добавление DOCTYPE после факта не изменит этого. Кроме того, если бы это действительно работало, сколько стилей вы бы нарушили? :)   -  person Nick Craver    schedule 21.12.2010


Ответы (1)


Это не <doctype html>. Его:

<!DOCTYPE html>
<html (xmlns or any other attributes you want)>

<!DOCTYPE не является элементом. Он имеет <! в начале, что недопустимо для элемента. Это «объявление типа документа», и его нельзя изменить после первоначального синтаксического анализа.

Даже в браузерах, интерфейсы DOM которых позволяют перемещать/заменять узел DocumentType, представляющий объявление типа документа, это не приводит к изменению режима Quirks и Standards, что определяется только при начальной загрузке. время. Вы не можете изменить документ между режимами.

Вы можете загрузить новый документ из существующего документа, но с измененным режимом:

<!-- no doctype, loads in Quirks Mode (BackCompat) -->
<html>
    <!-- rest of the document, then at the end: -->

    <script>
        alert('now in compatMode '+document.compatMode);
        if (document.compatMode==='BackCompat') {
            setTimeout(function() {
                var markup= document.documentElement.innerHTML;
                markup= '<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">'+markup+'</html>';
                document.open();
                document.write(markup);
                document.close();
            }, 0);
        }
    </script>
</html>

Но я бы настоятельно не советовал этого делать. Это уродливо, сбрасывает любое состояние и перерисовывает в конце времени загрузки и имеет всевозможные негативные последствия для сценариев.

Если вам нужен стандартный режим, вам действительно нужно добавить тип документа в сам HTML. Если вы абсолютно не можете прикасаться к приложению, как насчет использования фильтра ISAPI (при условии, что ваш веб-сервер — IIS) для добавления типа документа в вывод HTML?

person bobince    schedule 20.12.2010
comment
Очень четкая и краткая информация. Ваш ответ был информативным и легким для чтения и понимания. Вы бесценный участник StackOverflow. Я работаю с компанией над добавлением !DOCTYPE в декларацию. Работает без него более 7 лет. Надеюсь, это удастся реализовать. Я не буду добавлять творческий сценарий для добавления DOCTYPE. Это было бы очень опасно, если бы данные передавались на страницу и т. д. Это потребовало бы обновления страницы, и кто знает, какой хаос это вызовет. Еще раз спасибо! - person caroline; 28.12.2010