Document ready jq: $( document ).ready() | jQuery Learning Center

javascript — Почему $(window).load выполняется раньше, чем $(document).ready?

$(window).load

Событие load происходит, когда сам элемент и все его дочерние элементы полностью загружены. Это событие может происходить на элементах, которые обладают полями URL (объект window, картинки, скрипты, фреймы).

Замечание 1: в некоторых случаях, если картинка содержится в кеше браузера, событие load может не произойти. Для такого случая можно воспользоваться специальным событием event.special.load, которое определено в небольшом плагине.

Замечание 2: если вам не требуется готовность мультимедийных файлов, лучше воспользоваться методом .ready(), который устанавливает обработчик готовности структуры документа, что происходит раньше начала загрузки файлов мультимедиа.

Тут все предельно ясно, если пишем $(window).load то код, написанный внутри этой конструкции, начнёт работу когда будет готов весь DOM включая изображения

. Такой вызов логичнее производить в случае, когда необходимо работать с изображениями (расчёт размеров изображения или еще что-то).


$(document).ready

$(document).ready код внутри блока начнёт выполняться сразу после того, когда будет готов DOM, за исключением картинок. Указанный код будет выполняться непосредственно после готовности DOM, не дожидаясь полной загрузки изображений. Вызов $(document).ready несколько раз приведет к последовательному исполнению вызовов друг за другом, в последовательности сверху вниз.


$(window).load или $(document).ready?

Хотя, для воспроизведения такой ситуации потребуется немало усилий, все равно остаются нюансы. Иногда, такое возникает, когда внутри события ready срабатывает подписка на load к примеру, или наоборот, что приводит к странному поведению.

Если опираться на некоторые другие ответы, такие как:

  • After all $(document). ready() have run, is there an event for that?
  • window.onload vs $(document).ready()
  • multiple $(document).ready and $(window).load in $(document).ready

то приходишь к выводу, что событие $(window).load всегда должно произойти после $(document).ready. Но, факт присутствия такого поведения имеется.

Теперь подумаем про кеширование страницы. Да, действительно, после того, как изображения будут закэшированы весь написанный вами код, скорее всего, начнет выполняться последовательно, сверху вниз. Таким образом получатся ситуации, когда

$(window).load и $(document).ready оба этих блока будут ждать только загрузку DOM, а если еще и подписка на событие внутри события будет, то получится коллизия, и стоящий $(window).load перед $(document).ready выполнится раньше. В любом случае, коллизия происходит не просто так и нужно заняться исправлением кода и его рефакторингом.

Полезные ссылки для ознакомления:

  • $(document). ready vs $(window).load vs window.onload
  • Обработчик события load .load()
  • Обработчик готовности дерева DOM .ready()
  • .ready()
  • .load()
  • Справочник jQuery Загрузка документа

JavaScript · Bootstrap v5.0

Индивидуальные или скомпилированные

Плагины могут быть включены по отдельности (используя отдельный Bootstrap js/dist/*.js ) или все сразу, используя bootstrap.js или уменьшенный bootstrap. min.js (не включайте оба).

Если вы используете сборщик (Webpack, Rollup…), вы можете использовать файлы /js/dist/*.js , которые готовы к UMD.

Использование Bootstrap в качестве модуля

Мы предоставляем версию Bootstrap, построенную как ESM ( bootstrap.esm.js и bootstrap.esm.min.js ), который позволяет вам использовать Bootstrap в качестве модуля в вашем браузере, если ваши целевые браузеры его поддерживают.

 <тип сценария = "модуль">
  импортировать {Toast} из 'bootstrap.esm.min.js'
  Array.from(document.querySelectorAll('.toast'))
    .forEach(toastNode => новый Toast(toastNode))

 

Несовместимые плагины

Из-за ограничений браузера некоторые из наших плагинов, а именно плагины Dropdown, Tooltip и Popover, нельзя использовать в

Зависимости

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

Наши раскрывающиеся списки, всплывающие окна и всплывающие подсказки также зависят от Popper.

Все еще хотите использовать jQuery? Это возможно!

Bootstrap 5 предназначен для использования без jQuery, но все же можно использовать наши компоненты с jQuery. Если Bootstrap обнаружит jQuery в окне объект , он добавит все наши компоненты в систему плагинов jQuery; это означает, что вы сможете сделать $('[data-bs-toggle="tooltip"]').tooltip() , чтобы включить всплывающие подсказки. То же самое касается и других наших компонентов.

Атрибуты данных

Почти все подключаемые модули Bootstrap можно включить и настроить только через HTML с атрибутами данных (наш предпочтительный способ использования функций JavaScript). Обязательно использовать только один набор атрибутов данных для одного элемента (например, вы не можете вызвать всплывающую подсказку и модальное окно с помощью одной и той же кнопки.)

Селекторы

В настоящее время для запроса элементов DOM мы используем собственные методы по соображениям производительности, поэтому вы должны использовать допустимые селекторы. Если вы используете специальные селекторы, например: roll:Example , обязательно избегайте их.

События

Bootstrap предоставляет настраиваемые события для уникальных действий большинства плагинов. Как правило, они бывают в форме инфинитива и причастия прошедшего времени, где инфинитив (например, показать ) запускается в начале события, а его форма причастия прошедшего времени (например, показано ) запускается при завершении действия.

Все инфинитивные события обеспечивают функциональность

preventDefault() . Это дает возможность остановить выполнение действия до его начала. Возврат false из обработчика событий также автоматически вызовет preventDefault() .

 переменная myModal = document.getElementById('myModal')
myModal.addEventListener('show.bs.modal', функция (событие) {
  если (!данные) {
    return event.preventDefault() // останавливает показ модального окна
  }
})
 

События jQuery

Bootstrap обнаружит jQuery, если jQuery присутствует в объекте window и нет атрибута data-bs-no-jquery , установленного для . Если jQuery найден, Bootstrap будет генерировать события благодаря системе событий jQuery. Поэтому, если вы хотите прослушивать события Bootstrap, вам придется использовать методы jQuery ( .on , .one ) вместо addEventListener

.

 $('#myTab a').on('show.bs.tab', функция () {
  // сделай что-нибудь...
})
 

Programmatic API

Все конструкторы принимают необязательный объект опций или ничего (что запускает подключаемый модуль с его поведением по умолчанию):

 var myModalEl = document.getElementById('myModal')
var modal = new bootstrap.Modal(myModalEl) // инициализируется значениями по умолчанию
var modal = new bootstrap.Modal(myModalEl, {клавиатура: false}) // инициализируется без клавиатуры
 

Если вы хотите получить конкретный экземпляр плагина, каждый плагин предоставляет метод getInstance . Чтобы получить его непосредственно из элемента, сделайте следующее: bootstrap. Popover.getInstance(myPopoverEl) .

Селекторы CSS в конструкторах

Вы также можете использовать селектор CSS в качестве первого аргумента вместо элемента DOM для инициализации подключаемого модуля. В настоящее время элемент для плагина находится методом

querySelector , так как наши плагины поддерживают только один элемент.

 var modal = новый bootstrap.Modal('#myModal')
var dropdown = новый bootstrap.Dropdown('[data-bs-toggle="dropdown"]')
 

Асинхронные функции и переходы

Все программные методы API являются асинхронными и возвращаются вызывающей стороне после начала перехода, но до его завершения .

Чтобы выполнить действие после завершения перехода, вы можете прослушать соответствующее событие.

 переменная myCollapseEl = document.getElementById('myCollapse')
myCollapseEl.addEventListener('show.bs.collapse', функция (событие) {
  // Действие, выполняемое после расширения сворачиваемой области
})
 

Кроме того, вызов метода на компонент перехода будет проигнорирован

.

 переменная myCarouselEl = document.getElementById('myCarousel')
var carousel = bootstrap.Carousel.getInstance(myCarouselEl) // Получить экземпляр карусели
myCarouselEl.addEventListener('slid.bs.carousel', функция (событие) {
  carousel.to('2') // Перейдет к слайду 2, как только завершится переход к слайду 1
})
carousel.to('1') // Начнет переход к слайду 1 и вернется к вызывающей стороне
carousel.to('2') // !! Будет проигнорирован, т.к. переход на слайд 1 не закончен!!
 

Настройки по умолчанию

Вы можете изменить настройки по умолчанию для плагина, изменив объект Constructor плагина. По умолчанию :

 // изменяет значение по умолчанию для параметра «клавиатура» модального плагина на false
bootstrap.Modal.Default.keyboard = ложь
 

Нет конфликта (только если вы используете jQuery)

Иногда необходимо использовать плагины Bootstrap с другими фреймворками пользовательского интерфейса. В этих обстоятельствах иногда могут возникать конфликты пространств имен.

Если это произойдет, вы можете позвонить .noConflict для плагина, для которого вы хотите восстановить значение.

 var bootstrapButton = $.fn.button.noConflict() // вернуть $.fn.button к ранее присвоенному значению
$.fn.bootstrapBtn = bootstrapButton // дать $().bootstrapBtn функциональность Bootstrap
 

Номера версий

Доступ к версии каждого плагина Bootstrap можно получить через свойство VERSION конструктора плагина. Например, для плагина всплывающей подсказки:

 bootstrap.Tooltip.VERSION // => "5.0.2"
 

Никаких специальных откатов при отключенном JavaScript

Плагины Bootstrap не очень изящно отступают при отключенном JavaScript. Если вас волнует пользовательский опыт в этом случае, используйте

Сторонние библиотеки

Bootstrap официально не поддерживает сторонние библиотеки JavaScript , такие как Prototype или jQuery UI.

Несмотря на 9ария-[\w-]*$/i вар DefaultAllowlist = { // Глобальные атрибуты разрешены для любого предоставленного ниже элемента. '*': ['класс', 'каталог', 'идентификатор', 'язык', 'роль', ARIA_ATTRIBUTE_PATTERN], a: ['цель', 'href', 'название', 'отн'], область: [], б: [], бр: [], столбец: [], код: [], раздел: [], эм: [], час: [], ч2: [], h3: [], h4: [], h5: [], h5: [], h6: [], я: [], img: ['src', 'srcset', 'alt', 'название', 'ширина', 'высота'], ли: [], ол: [], п: [], пре: [], с: [], маленький: [], охватывать: [], суб: [], Как дела: [], сильный: [], ты: [], ул: [] } 9данные-мое-приложение-[\w-]+/ myDefaultAllowList['*'].push(myCustomRegex)

Если вы хотите обойти наше дезинфицирующее средство, потому что предпочитаете использовать специальную библиотеку, например DOMPurify, вам следует сделать следующее:

 var yourTooltipEl = document.getElementById('yourTooltip')
var tooltip = новый bootstrap.
Tooltip(yourTooltipEl, { sanitizeFn: функция (содержимое) { вернуть DOMPurify.sanitize (контент) } })

JS篇(001)-document load 和document ready 的区别_51CTO博客_document load和document ready的区别

JS篇(001)-document load 和document ready 的区别

原创

© 著作权 作者 所有 ​​: : 来自 51CTO 博客 齐丶先 丶森 的 作品 作品 , 请 联系 作者 转载 授权 , 否则 将 追究 责任 责任

: : 页面 加载 有 两 种 法律 责任

: : : 加载 有 两 事件 事件 责任

是 当 页面 资源 全部 加载 完成 后 ((包括 文档 树 树 , css 文件 , js 文件 , 图片 资源)) 执行 一 个 函数 函数 函数 : : 资源) 多 执行 , 时间 较 长 后 执行 图片 图片 资源 资源 多 需要 需要 需要 函数 函数 需要 需要 需要 需要等待 较 时间 , 所以 一些 效果 可能 受到 影响

2. $ (документ) .ready () 是 当 文档 树 加载 完成 后 执行 一 个 函数 (不 包含 图片 , CSS 等) 所以 比 比 较 执行
在原生的js中不包括ready()这个方法,只有load方法也就是onload事件

参与互动

  • знак
  • 收藏
  • 评论
  • 分享
  • 举报

相关文章

关注

分类列表

  • # 前端面试秘籍147篇
  • # java4篇
  • # vue总结2篇
  • # 书籍2篇

近期文章

  • 1.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *