<html>
<head>
<title>HTML Document</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
</head>
<body>
<div id="hover-id">
Hello World
</div>
<script>
jQuery(document).ready(function($){
$(document).on('mouseover', '#hover-id', function(){
$(this).css('color','yellowgreen');
});
$(document).on('mouseout', '#hover-id', function(){
$(this).css('color','black');
});
});
</script>
</body>
</html>
Некоторые из более серьезных проблем:
Намного лучше использовать безопасные и DOM-дружественные методы [DOM-манипулирования DOM]
Он перезаписывает контент на странице, что является наиболее очевидной причиной, но я бы не назвал его «плохим».
Он просто не имеет большого смысла, если вы не создаете весь документ, используя JavaScript, в этом случае вы можете начать с document.write.
Тем не менее, вы не используете DOM при использовании document.write - вы просто сбрасываете текст в документ так, чтобы Я бы сказал, что это плохая форма.
document.write
является плохой практикой, заключается в том, что вы не можете придумать сценарий, в котором вы не можете найти лучшую альтернативу. document.write
.
– bert bruynooghe
19 May 2017 в 16:29
Я думаю, самая большая проблема в том, что любые элементы, написанные с помощью document.write, добавляются в конец элементов страницы. Это редко желаемый эффект с современными макетами страниц и AJAX. (вы должны иметь в виду, что элементы в DOM являются временными, и когда запуск скрипта может повлиять на его поведение).
Гораздо лучше установить элемент-заполнитель на странице, а затем манипулировать его innerHTML.
Chrome может заблокировать document.write
, который вставляет сценарий в определенных случаях. Когда это произойдет, оно отобразит это предупреждение в консоли:
. С помощью document.write вызывается скрипт с перекрестным запуском Parser. Это может быть заблокировано браузером, если устройство имеет плохую сетевую связь.
Ссылки:
Другое законное использование document.write
происходит из примера HTML5 Boilerplate index.html .
<!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.6.3.min.js"><\/script>')</script>
Я также видел тот же метод для использования функции json2.js JSON анализирует / строит полипол (, необходимый IE7 и ниже ).
<script>window.JSON || document.write('<script src="json2.js"><\/script>')</script>
script
через DOM-манипуляцию, загружается ли он синхронно? Если это не так, это не замена.
– John Dvorak
5 June 2013 в 11:41
src
) . В противном случае он будет выполнен «как можно скорее», асинхронно.
– Oriol
14 August 2016 в 23:51
document.write
, которые вставляют теги <script>
, если пользователь подключен к 2G-соединению. См. developers.google.com/web/updates/2016/08/…
– Flimm
12 July 2017 в 15:13
Можно рассматривать document.write () (и .innerHTML) как оценку строки исходного кода. Это может быть очень удобно для многих приложений. Например, если вы получаете HTML-код в виде строки из какого-то источника, это удобно просто «оценить».
В контексте Lisp манипуляции с DOM будут похожи на манипулирование структурой списка, например. создайте список (оранжевый), выполнив:
(cons 'orange '())
И document.write () будет похож на оценку строки, например. создайте список, оценив строку исходного кода следующим образом:
(eval-string "(cons 'orange '())")
Lisp также обладает очень полезной способностью создавать код с использованием манипулирования списком (например, с использованием стиля DOM для создания дерева разбора JS) , Это означает, что вы можете создать структуру списка, используя «стиль DOM», а не «стиль строки», а затем запустить этот код, например. например:
(eval '(cons 'orange '()))
Если вы используете инструменты кодирования, такие как простые живые редакторы, очень удобно иметь возможность быстро оценивать строку, например, используя document.write () или .innerHTML. Lisp идеален в этом смысле, но вы можете делать очень классные вещи также в JS, и многие люди делают это, например http://jsbin.com/
Сверху моей головы:
document.write
необходимо использовать в загрузке страницы или загрузке тела. Поэтому, если вы хотите использовать скрипт в любое другое время для обновления содержимого вашей страницы, document.write практически бесполезен. document.write
будет обновлять HTML-страницы, а не XHTML / XML. IE, похоже, довольно прощает этот факт, но других браузеров не будет. document.write
вызовы, которые вставляют скрипт при выполнении определенных условий.
– Flimm
12 July 2017 в 15:21
На основе анализа, выполненного Google-Chrome Dev Tools Lighthouse Audit
Он может блокировать вашу страницу
document.write
работает только во время загрузки страницы; Если вы вызываете его после того, как страница будет загружена, она перезапишет всю страницу.
Это фактически означает, что вы должны вызывать ее из встроенного блока сценария. И это не позволит браузеру обрабатывать части страница, следующая за ней. Сценарии и изображения не будут загружены до завершения записи.
Pro:
Con:
document.write
, создавая тэг <script>
при определенных обстоятельствах. [Д0] developers.google.com/web/updates/2016/08/…
– Flimm
12 July 2017 в 15:14
Недостатки document.write в основном зависят от этих трех факторов:
a) Реализация
document.write () в основном используется для записи содержимого на экран, как только поскольку это содержание необходимо. Это означает, что это происходит где угодно, либо в файле JavaScript, либо внутри тега сценария в HTML-файле. Поскольку тег скрипта размещается в любом месте такого HTML-файла, неплохо иметь документы document.write () внутри блоков сценариев, которые переплетены с HTML внутри веб-страницы.
b) Рендеринг
Хорошо продуманный код в целом будет принимать любой динамически сгенерированный контент, хранить его в памяти, продолжать манипулировать им, когда он проходит через код, прежде чем он наконец выйдет на экран. Поэтому, чтобы повторить последний пункт в предыдущем разделе, рендеринг содержимого на месте может отображаться быстрее, чем другой контент, на который можно положиться, но он может быть недоступен для другого кода, который, в свою очередь, требует, чтобы контент отображался для обработки. Чтобы решить эту дилемму, нам нужно избавиться от document.write () и реализовать ее правильно.
c) Невозможное манипулирование
После того, как оно написано, оно выполняется и продолжается. Мы не можем вернуться, чтобы манипулировать им, не вдаваясь в DOM.
Он разбивает страницы с помощью рендеринга XML (например, страницы XHTML).
Лучше всего: некоторые браузеры вернутся к HTML-рендерингу, и все работает нормально.
Вероятно: в некоторых браузерах отключена функция document.write () в режиме рендеринга XML.
Худший: в некоторых браузерах будет возникать ошибка XML при использовании функции document.write ().
document.write
вызывается после того, как документ закончил загрузку – Izkata 19 September 2013 в 03:37