Нужна помощь с: JQuery Prepend Doctype в HTML - PullRequest
3 голосов
/ 20 декабря 2010

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

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

Нужна помощь с:

1) Я думаю, что мне нужно использовать jQuery, чтобы «предварять /prependTo "a" 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 ")

1 Ответ

24 голосов
/ 21 декабря 2010

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

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

<!DOCTYPE не является элементом.Он имеет <! в начале, что недопустимо для элемента.Это «объявление типа 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>

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

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

...