Что является эквивалентом не-jQuery $(document).ready()
?
javascript
jquery
TIMEX
источник
источник
$(document).ready()
событие jQuery без использования какой-либо библиотеки, взгляните на это: stackoverflow.com/questions/1795089/…$(document).ready()
- books.google.com/… . Он также используетaddEvent
абстракцию привязки событий, написанную Дином Эдвардсом, код которого также есть в книге :)Ответы:
Хорошая вещь о
$(document).ready()
том, что он стреляет раньшеwindow.onload
. Функция загрузки ожидает загрузки всего, включая внешние ресурсы и изображения.$(document).ready
однако срабатывает, когда дерево DOM завершено и им можно манипулировать. Если вы хотите получить готовый DOM без jQuery, вы можете проверить эту библиотеку. Кто-то извлек толькоready
часть из jQuery. Он красивый и маленький, и вы можете найти его полезным:уже в Google Code
источник
Это отлично работает, от ECMA
Он
window.onload
не равен JQuery,$(document).ready
поскольку$(document).ready
ожидает только дерева DOM приwindow.onload
проверке всех элементов, включая внешние ресурсы и изображения.РЕДАКТИРОВАТЬ : Добавлен IE8 и более старый эквивалент, благодаря наблюдению Яна Дерка . Вы можете прочитать исходный код этого кода на MDN по этой ссылке :
Есть и другие варианты, кроме
"interactive"
. Смотрите MDN ссылку для деталей.источник
document.addEventListener("DOMContentLoaded",function(){console.log(123)})
попробуйте сейчасМаленькая вещь, которую я собрал
domready.js
Как это использовать
Вы также можете изменить контекст, в котором выполняется обратный вызов, передав второй аргумент
источник
Теперь, когда наступил 2018 год, вот быстрый и простой способ.
Это добавит прослушиватель событий, но если он уже запущен, мы проверим, находится ли dom в состоянии готовности или что он завершен. Это может произойти до или после завершения загрузки подресурсов (изображений, таблиц стилей, фреймов и т. Д.).
Дополнительные чтения
Обновить
Вот несколько быстрых утилитарных помощников, использующих стандарт ES6 Import & Export, который я написал, включая также TypeScript. Может быть, я смогу сделать из них быструю библиотеку, которая может быть установлена в проекты как зависимость.
JavaScript
Машинопись
обещания
источник
Согласно http://youmightnotneedjquery.com/#ready хорошая замена, которая все еще работает с IE8
Улучшения : Лично я бы также проверил, является ли тип
fn
функцией. И как @elliottregan предложил удалить прослушиватель событий после использования.Причина, по которой я отвечаю на этот вопрос поздно, заключается в том, что я искал этот ответ, но не мог найти его здесь. И я думаю, что это лучшее решение.
источник
Существует стандартная замена, DOMContentLoaded, которая поддерживается более чем на 90% браузеров, но не в IE8 (поэтому ниже код, используемый JQuery для поддержки браузеров) :
Нативная функция jQuery намного сложнее, чем просто window.onload, как показано ниже.
источник
DOMContentLoaded
иload
событие , используяaddEventListener
, и первое , что огнь удалить оба слушатель, так что это не срабатывает два раза.В простом ванильном JavaScript, без библиотек? Это ошибка.
$
это просто идентификатор, и он не определен, если вы его не определите.jQuery определяет
$
как собственный «все объект» (также известный какjQuery
так, чтобы вы могли использовать его, не конфликтуя с другими библиотеками). Если вы не используете jQuery (или какую-либо другую библиотеку, которая его определяет), то$
она не будет определена.Или вы спрашиваете, что такое эквивалент в простом JavaScript? В этом случае вы, вероятно, хотите
window.onload
, что не совсем эквивалентно, но это самый быстрый и простой способ приблизиться к тому же эффекту в обычном JavaScript.источник
В современных браузерах проще всего было бы использовать соответствующие GlobalEventHandlers , onDOMContentLoaded , onload , onloadeddata (...)
Событие DOMContentLoaded наступает, когда исходный HTML-документ полностью загружен и проанализирован, не дожидаясь окончания загрузки таблиц стилей, изображений и подкадров. Совсем другая загрузка событий должна использоваться только для обнаружения полностью загруженной страницы. Это невероятно популярная ошибка - использовать load, когда DOMContentLoaded будет гораздо более уместным, поэтому будьте осторожны.
https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded
Используемая функция является IIFE, очень полезной в этом случае, так как она запускается сама, когда готова:
https://en.wikipedia.org/wiki/Immediately-invoked_function_expression
Очевидно, более уместно поместить его в конец любого скрипта.
В ES6 мы также можем написать это как функцию стрелки:
Лучше всего использовать элементы DOM, мы можем дождаться готовности любой переменной, которая вызывает IIFE со стрелкой.
Поведение будет таким же, но с меньшим воздействием на память.
Во многих случаях объект документа также запускается по готовности , по крайней мере, в моем браузере. Синтаксис тогда очень хорош, но он требует дальнейших проверок на совместимость.
источник
Тело onLoad может быть альтернативой:
источник