У меня есть скрипт, который использует $(document).ready
, но он не использует ничего другого из jQuery. Я хотел бы облегчить это, удалив зависимость JQuery.
Как я могу реализовать свой собственный $(document).ready
функционал без использования jQuery? Я знаю, что использование window.onload
не будет таким же, как window.onload
пожары после того , как все изображения, кадры и т. Д. Были загружены.
javascript
jquery
FlySwat
источник
источник
$(document).ready
, что вы можете легко решить эту проблему, запустив код в самом низу страницы, а не вверху. HTML5Boilerplate использует именно этот подход.Ответы:
Существует стандартная замена,
DOMContentLoaded
которая поддерживается более чем 98% браузеров , но не IE8:Нативная функция jQuery намного сложнее, чем просто window.onload, как показано ниже.
источник
Редактировать:
Вот жизнеспособная замена для JQuery готов
Взято из https://plainjs.com/javascript/events/running-code-when-the-document-is-ready-15/
Еще одна хорошая функция domReady, взятая из https://stackoverflow.com/a/9899701/175071
Поскольку принятый ответ был очень далек от завершения, я соединил «готовую» функцию, например
jQuery.ready()
основанную на исходном коде jQuery 1.6.2:Как пользоваться:
Я не уверен, насколько функционален этот код, но он отлично работал с моими поверхностными тестами. Это заняло довольно много времени, поэтому я надеюсь, что вы и другие можете извлечь из этого пользу.
PS: предлагаю компилировать .
Или вы можете использовать http://dustindiaz.com/smallest-domready-ever :
или встроенная функция, если вам нужно только поддерживать новые браузеры (в отличие от готового jQuery, он не запустится, если вы добавите его после загрузки страницы)
источник
Три варианта:
script
это последний тег тела, DOM будет готов до выполнения тега скриптаonreadystatechange
Источник: MDN
DOMContentLoaded
Озабоченность браузерами каменного века: Зайдите в исходный код jQuery и используйте
ready
функцию. В этом случае вы не анализируете + не выполняете всю библиотеку, вы делаете только очень маленькую ее часть.источник
Разместите свое
<script>/*JavaScript code*/</script>
право перед закрывающим</body>
тегом.Следует признать, что это может не подходить для всех, так как требует изменения файла HTML, а не просто что-то делать в файле JavaScript
document.ready
, но все же ...источник
</html>
тега?html
тег должен содержать толькоhead
иbody
.Бедное мужское решение:
Посмотреть скрипку
Добавил этот, немного лучше, я думаю, собственный объем и не рекурсивный
Посмотреть скрипку
источник
setInterval
и полностью удалите рекурсию.Я использую это:
Примечание. Возможно, это работает только в новых браузерах, особенно в следующих: http://caniuse.com/#feat=domcontentloaded
источник
Действительно, если вы заботитесь только о Internet Explorer 9+ , этого кода будет достаточно для замены
jQuery.ready
:Если вы беспокоитесь об Internet Explorer 6 и некоторых действительно странных и редких браузерах, это будет работать:
источник
Этот вопрос был задан довольно давно. Для тех, кто только видит этот вопрос, теперь есть сайт под названием «вам может не понадобиться jquery» который разбит - по уровню необходимой поддержки IE - все функции jquery и предоставляют некоторые альтернативные, более мелкие библиотеки.
Скрипт, готовый к использованию в IE8, может не потребовать jquery
источник
'onreadystatechange'
это нужно, а неdocument.attachEvent('onload', fn);
Я недавно использовал это для мобильного сайта. Это упрощенная версия Джона Ресига из «Техники Pro JavaScript». Это зависит от addEvent.
источник
Кросс-браузер (тоже старые браузеры) и простое решение:
Отображение оповещения в jsfiddle
источник
Ответ jQuery был довольно полезен для меня. С небольшим заводом это соответствовало моим потребностям хорошо. Надеюсь, это кому-нибудь еще поможет.
источник
removeListener
необходимо вызывать документ с контекстом, т.е.removeListener.call(document, ...
Вот самый маленький фрагмент кода для проверки готовности DOM, который работает во всех браузерах (даже в IE 8):
Смотрите этот ответ .
источник
Просто добавьте это внизу вашей HTML-страницы ...
Потому что документы HTML анализируются сверху вниз.
источник
Стоит поискать в Rock Solid addEvent () и http://www.braksator.com/how-to-make-your-own-jquery .
Вот код на случай, если сайт не работает
источник
Этот кросс-браузерный код вызовет функцию, когда DOM будет готов:
Вот как это работает:
domReady
вызываетtoString
метод функции, чтобы получить строковое представление передаваемой функции и обернуть его в выражение, которое немедленно вызывает функцию.domReady
создает элемент сценария с выражением и добавляет его кbody
документу.body
после того, как DOM готов.Например, если вы сделаете это:,
domReady(function(){alert();});
кbody
элементу будет добавлено следующее :Обратите внимание, что это работает только для пользовательских функций. Следующее не будет работать:
domReady(alert);
источник
Это 2020 год и
<script>
тег имеетdefer
атрибут.например:
это указывает, что скрипт выполняется, когда страница закончила анализ.
https://www.w3schools.com/tags/att_script_defer.asp
источник
Как насчет этого решения?
источник
Всегда полезно использовать эквиваленты JavaScript по сравнению с jQuery. Одна из причин заключается в том, что от библиотеки зависит меньше библиотек, и они работают намного быстрее, чем эквиваленты jQuery.
Одна из фантастических ссылок на jQuery-эквиваленты - http://youmightnotneedjquery.com/ .
Что касается вашего вопроса, я взял приведенный ниже код по вышеуказанной ссылке :) Единственное предостережение: он работает только с Internet Explorer 9 и более поздними версиями.
источник
Самый минимальный и 100% рабочий
Я выбрал ответ от PlainJS, и он отлично работает для меня. Он распространяется
DOMContentLoaded
так, что он может быть принят во всех браузерах.Эта функция является эквивалентом метода jQuery
$(document).ready()
:Однако, в отличие от jQuery, этот код будет корректно работать только в современных браузерах (IE> 8), и не будет, если документ уже отрисован во время вставки этого скрипта (например, через Ajax). Поэтому нам нужно немного расширить это:
Это охватывает практически все возможности и является жизнеспособной заменой помощнику jQuery.
источник
Мы нашли быструю кросс-браузерную реализацию, которая может помочь в большинстве простых случаев с минимальной реализацией:
источник
doc.body
?!Представленные здесь решения setTimeout / setInterval будут работать только при определенных обстоятельствах.
Проблема проявляется особенно в старых версиях Internet Explorer до 8.
Переменные, влияющие на успех этих решений setTimeout / setInterval:
оригинальный (нативный Javascript) код для решения этой конкретной проблемы находится здесь:
это код, из которого команда jQuery создала свою реализацию.
источник
Вот то, что я использую, это быстро и охватывает все основы, я думаю; работает для всего, кроме IE <9.
Это похоже на все случаи:
Событие DOMContentLoaded доступно в IE9 и во всем остальном, поэтому я лично считаю, что это нормально. Перепишите объявление функции стрелки в обычную анонимную функцию, если вы не переносите свой код из ES2015 в ES5.
Если вы хотите дождаться загрузки всех ресурсов, отображения всех изображений и т. Д., Используйте вместо этого window.onload.
источник
Если вам не нужно поддерживать очень старые браузеры, вот способ сделать это, даже если ваш внешний скрипт загружен с атрибутом async :
источник
Для IE9 +:
источник
Если вы загружаете jQuery в нижней части BODY, но у вас возникают проблемы с кодом, который записывает jQuery (<func>) или jQuery (document) .ready (<func>), проверьте jqShim на Github.
Вместо того, чтобы воссоздавать свою собственную функцию готовности документа, она просто удерживает функции до тех пор, пока не станет доступен jQuery, а затем продолжит работу с jQuery, как и ожидалось. Смысл перемещения jQuery в нижней части тела состоит в том, чтобы ускорить загрузку страницы, и вы все равно можете сделать это, вставив jqShim.min.js в заголовок вашего шаблона.
Я закончил тем, что написал этот код, чтобы переместить все скрипты в WordPress в нижний колонтитул, и именно этот код прокладки теперь находится прямо в заголовке.
источник
Попробуй это:
источник
onDocReady обеспечивает обратный вызов, когда HTML-домен готов к полному доступу / анализу / манипулированию.
onWinLoad обеспечивает обратный вызов, когда все загружено (изображения и т. д.)
источник
источник
Большинство ванильных функций JS Ready НЕ учитывают сценарий, в котором устанавливается
DOMContentLoaded
обработчик после того, как документ уже загружен. Это означает, что функция никогда не будет работать . Это может произойти , если вы посмотрите вDOMContentLoaded
пределахasync
внешнего скрипта (<script async src="file.js"></script>
).Код ниже проверяет
DOMContentLoaded
только, если документ ещеreadyState
неinteractive
илиcomplete
.Если вы хотите поддержать IE, а также:
источник
Я просто использую:
И в отличие
document.addEventListener("DOMContentLoaded" //etc
от самого верхнего ответа, он работает еще в IE9 - http://caniuse.com/#search=DOMContentLoaded указывает только на IE11.Интересно, я наткнулся на это
setTimeout
решение в 2009 году: проверяет ли готовность DOM излишним?что, вероятно, можно было бы сформулировать немного лучше, поскольку я имел в виду «не слишком ли сложно использовать более сложные подходы различных сред для проверки готовности DOM».Мое лучшее объяснение тому, почему этот метод работает, состоит в том, что, когда сценарий с таким setTimeout достигнут, DOM находится в середине анализа, поэтому выполнение кода в setTimeout откладывается до завершения этой операции.
источник