Enable jQuery Migrate Helper — Плагин для WordPress
С обновлением WordPress 5.5 инструмент миграции, известный как jquery-migrate
, больше не включен по умолчанию. Это может привести к неожиданному поведению некоторых тем или плагинов, которые используют старый код.
Этот плагин служит временным решением, позволяя авторам плагинов и тем получить больше времени для обновления и тестирования своего кода.
С обновлением WordPress 5.6 обновляется также и поставляемая версия jQuery. Возможно что старый код, который ранее вызывал лишь предупреждения, теперь перестанет работать полностью или станет вызывать ошибки.
Впрочем, некоторые возможности могут просто перестать работать без последствий для функционала сайта.
Этот плагин позволяет использовать на сайте версию jQuery из предыдущих выпусков WordPress, в течении опредённого времени, чтобы дать вам возможность обновить плагины и темы использующие устаревший код (в.т.ч. сообщить их авторам о необходимости переписать код на более современный) или найти им замену. Вам не стоит рассматривать откат на старую версию jQuery как постоянное решение.
- Upload to your plugins folder, usually
wp-content/plugins/
. - Activate the plugin on the plugin screen.
- That’s it! The plugin handles the rest automatically for you.
Что означает что функция «устарела»?
Скрипт, файл или иной фрагмент кода считается устаревшим, когда разработчики заменяют его более современным или удаляют полностью.
Что изменилось в WordPress 5.6
С обновлением WordPress 5.6 обновляется также и поставляемая версия jQuery. Возможно что старый код, который ранее вызывал лишь предупреждения, теперь перестанет работать полностью или станет вызывать ошибки.
Этот плагин позволит при необходимости, вернуть старую версию jQuery (это также может произойти автоматически при определении использования старого кода). Что позволит вам выиграть еще больше времени до обновления или замены устаревших плагинов или темы.Как использовать консоль разработчика в браузере
На WordPress.org имеется статья (на английском) по использованию консоли браузера для диагностики ошибок JavaScript.
Плагин не записывает в журнал предупреждения об использовании устаревших функций или смену версии jQuery
При наличии на сайте плагинов, которые объединяют JS файлы или загружают их асинхронно (т.н. плагины оптимизации/минификации/конкатенации) этот плагин может не работать должным образом.
Если вашему сайту требуется для работы этот плагин, то отключите другие плагины вмешивающиеся в загрузку JavaScript (например перечисленных выше типов). Как только вы решите проблемы, вы сможете отключить этот плагин и снова использовать другие инструменты оптимизации JS.
Как мне понять нужен мне этот плагин или нет
Если что-то на вашем сайте перестало работать после обновления WordPress, то вы можете установить и активировать этот плагин. Если это поможет, то оставьте его включенным и следуйте инструкциям плагина (Вам следует идентифицировать источник проблемного кода, сообщить его авторам о необходимости обновления и ждать пока они это сделают, либо подыскать достойную замену для проблемного плагина или темы). Плагин сообщит вам о том, когда его можно будет удалить.
На сайте море предупреждений при использовании jQuery версии 3
jQuery версии 3 только начала использоваться в WordPress, это ожидаемо.
Предупреждения об использовании устаревших функций означают, что инструмент миграции работает по обеспечению совместимости старого кода до тех пор, пока код не будет обновлен. При этом функции сайта продолжают работать как прежде.
awesome!..it’s solved my sidebar issues
Weeks later and I am STILL seeing this damned message every week.
This is keeping a site with a paid theme abandoned by its developer working as intended. A backwards compatible patch like this is important keeping things working while applying security updates. Thank You!
I was referred to this plugin from Qode Interactive (who I purchased my theme from) in order to fix some issues on my website, but then once I installed the plugin it completely broke my website. I tried to disable and uninstall it, but the affects of the plugin stayed. I tried to restore from a backup, but even that didn’t work!! Finally, I contacted SiteGround and an agent helped me identify that the plugin left some file in the public_html folder that was outside of the backup. He deleted the files from public_html, restored from backup and I purged my cache and everything is working again. Lot of trouble to get back to square 1.
Every time WordPress is updated this plugin is reinstalled, every time it’s reinstalled I get an email telling me I don’t need this plugin and that I should think about deleting it, and every time I delete the plugin it’s reinstalled when WordPress gets updated. I can’t get this plugin to stop being installed without my consent
Thanks!!! It fixed my broken dashboard!
Посмотреть все 102 отзыва«Enable jQuery Migrate Helper» — проект с открытым исходным кодом. В развитие плагина внесли свой вклад следующие участники:
Участникиv 1.3.0
- Added legacy jQuery UI to be loaded if legacy jQuery is in use.
- Added mention of site URLs in automatic emails.
- Added option to enable/disable automatic downgrades.
- Added logic to ensure only one downgrade request is sent per page load.
- Updated logic around automatic downgrades for improved performance.
- Fixed core deprecation notices being incorrectly labeled as undetermined inline ones.
v 1.2.0
- Added settings page
- Added option for downgrading to legacy jQuery
- Added automatic downgrades
- Added option to log deprecations in modern jQuery
- Added e-mail notifications
- Added weekly email digest of deprecations
- Added option to allow logging deprecations from anonymous site visitors
- Changed the handling of inline JavaScript code causing deprecation notices
- Changed the admin bar to be two fixed links to avoid ever changing contexts
- Changed the admin notices to be persistent when using legacy jQuery after upgrading to WordPress 5.6
- Changed how concatenation is disabled, to address public-facing performance concerns
- Fixed recommendation to remove plugin when not logging any deprecations having the wrong logic and not being displayed.
v 1.1.0
- Added option to dismiss deprecation notices in backend
- Added logging of deprecation notices in the front end
- Added admin bar entry to show when deprecations occur
- Added view of logged deprecations
- Added dashboard notice encouraging users to remove the plugin if no deprecations have been logged in a while (1 week).
- Changed the time interval between showing the dashboard nag from 2 weeks to 1 week, as WordPress 5.6 comes closer.
v 1.0.1
- Fix one of the admin notices being non-dismissible.
v 1.0.0
- Первый выпуск.
Внешняя ссылка и ссылка на оборудование с помощью jQuery Mobile Oh! Android
Это мой первый веб-сайт с jQuery mobile, и у меня проблемы с внешними ссылками.
Я приведу один пример.
Это страница A
<!DOCTYPE html > <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>PageA</title> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> <link href="Style/Style.css" rel="stylesheet" type="text/css" /> <link href="http://code.jquery.com/mobile/1.0rc1/jquery.mobile-1.0rc1.min.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.min.js"></script> <script type="text/javascript" src="http://code.jquery.com/mobile/1.0rc1/jquery.mobile-1.0rc1.min.js"></script> </head> <body> <!-- Start of first page --> <div data-role="page" data-title="Page A" data-theme="b" data-dom-cache="false"> <div data-role="header" data-theme="b"> <h2>Page A</h2> </div> <!-- /header --> <div data-role="content"> <ul data-role="listview" data-theme="g"> <li><a href="PageB.htm" rel="external">PageB</a></li> </ul> </div> </div>
Когда я нажимаю ссылку, я перехожу на страницу B (до сих пор все в порядке)
<!DOCTYPE html > <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Pag B</title> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> <link href="Style/Style.css" rel="stylesheet" type="text/css" /> <link href="http://code.jquery.com/mobile/1.0rc1/jquery.mobile-1.0rc1.min.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="http://code.jquery. com/jquery-1.6.2.min.js"></script> <script type="text/javascript" src="http://code.jquery.com/mobile/1.0rc1/jquery.mobile-1.0rc1.min.js"></script> </head> <body> <!-- Start of first page --> <div data-role="page" data-title="Page B" data-theme="b" data-dom-cache="false"> <div data-role="header" data-theme="b"> <h2>Page B</h2> </div> <!-- /header --> <div data-role="content"> <p>I am Page B!!!</p> </div> <!-- /content --> <div data-role="footer" data-theme="c"> <h5>Test</h5> </div> <!-- /footer --> </div>
Когда я нахожусь на странице B, я нажимаю кнопку «Назад» на устройстве Android Mobile и возвращаюсь в Pag A.
Затем я снова нажимаю ссылку на странице A. Появляется страница B, но она также загружает страницу A с типичным загрузочным div, показывающим ..
Вопрос в том? Почему это происходит? И во-вторых, каково это для этого?
Я нашел способ решить с помощью события bebeforehide на странице B, но я думаю, что это не способ сделать это.
Спасибо!
У меня была аналогичная проблема. Мне удалось сузить его до проблем, связанных с использованием кнопки возврата оборудования. Мобильные браузеры не запускали событие document.ready или pageinit при использовании этой кнопки. Более того, эти события увольнялись более одного раза, когда снова переходили со страницы B на A после нажатия кнопки «Назад».
Проблема связана с onunload внутри элемента body. В приведенном выше примере, включая его на теге body страницы A, решается проблема:
Благодаря Pumbaa80 и Nickolay Есть ли кросс-браузерное событие onload при нажатии кнопки «Назад»?
History.pushState() — Интерфейсы веб API
В HTML документе метод history.pushState()
добавляет новое состояние в историю браузера
history. pushState(state, title[, url])
Параметры
state object
- Объект состояния – это JavaScript-объект, связанный с новой записью в истории, созданной
pushState()
. Всякий раз, когда пользователь переходит к новому состоянию, происходит событиеpopstate
, а свойствоstate
этого события содержит копию объекта состояния с записями истории. - Объект состояния может быть чем угодно, что может быть сериализовано. Поскольку Firefox сохраняет объекты состояния на диске пользователя, чтобы их можно было восстановить после перезапуска браузера, мы накладываем ограничение в 640 тысяч символов на сериализованное представление объекта состояния. Если вы передаёте объект состояния, чьё сериализованное представление больше этого значения, метод
pushState()
выдаст исключение. Если вам нужно хранилище большего размера, следует рассмотреть использованиеsessionStorage
и/илиlocalStorage
.
- title
- Заголовок — все браузеры, кроме Safari, на данный момент игнорируют этот параметр, но могут начать использовать в будущем. Ввиду будущих изменений метода, безопасным решением является передача пустой строки. В качестве альтернативы вы можете передать короткий заголовок для состояния, в которое переходите.
url
Необязательный- Через этот параметр передаётся URL-адрес новой записи в истории. Обратите внимание, что браузер не будет пытаться загрузить данный URL сразу после вызова
pushState()
, но может попытаться сделать это позже, например, после того, как пользователь перезапустит браузер. Новый URL-адрес не обязан быть абсолютным; если он относительный, то определяется относительно текущего URL. Новый URL должен вести на тот же домен, протокол и порт, иначеpushState()
выдаст исключение. Данный параметр не является обязательным; если он не указан, будет использоваться URL текущего документа.
Вызов pushState()
в некоторой степени похож на установку window.location = "#foo"
, поскольку они оба также создают и активируют ещё одну запись в истории, связанную с текущим документом.
Но у pushState()
есть несколько преимуществ:
- Новый URL может быть любым в пределах того же домена, порта и протокола, что и текущий адрес. Тогда как настройка
window.location
оставляет вас на том жеdocument
лишь в том случае, если вы меняете только хэш - Менять URL не обязательно. Тогда как настройка
window.location = "#foo";
создаёт новую запись в истории, только если текущий хеш не#foo
- С новой записью в истории можно связать любые данные. В подходе, основанном на хеше, все соответствующие данные нужно кодировать в короткую строку
- Если заголовок
title
впоследствии используется браузерами, эти данные могут быть использованы (независимо от, скажем, хеша).
Обратите внимание, что pushState()
никогда не вызывает событие hashchange
, даже если новый URL отличается от старого только хешем.
Создание новой записи истории браузера, задавая state, title, и url.
JavaScript
const state = { 'page_id': 1, 'user_id': 5 } const title = '' const url = 'hello-world.html' history.pushState(state, title, url)
Особенность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) |
Особенность | Android | Android Webview | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) | (Да) | (Да) |
| jQuery
Текущая активная поддержка
Настольный
- Хром: (Текущий — 1) и Текущий
- Пограничный: (Текущий — 1) и Текущий
- Firefox: (текущий — 1) и текущий, ESR
- Internet Explorer: 9+
- Safari: (Текущий — 1) и Текущий
- Opera: Текущая
Мобильный
- Стандартный браузер на Android 4. 0+ [1]
- Safari на iOS 7+
[1] Обходные пути для браузера Android 4.0-4.3 присутствуют в кодовой базе, но мы больше не тестируем эти версии активно.
О любой проблеме с jQuery в указанных выше браузерах следует сообщать как об ошибке в jQuery.
(Current — 1) и Current означает, что мы поддерживаем текущую стабильную версию браузера и предыдущую версию. Например, если текущая версия браузера 24.x, мы поддерживаем версии 24.x и 23.x.
Firefox ESR (выпуск с расширенной поддержкой) — это версия Firefox для использования организациями, включая школы, университеты, предприятия и других, которым требуется расширенная поддержка для массового развертывания.Он основан на обычном выпуске Firefox и синхронизируется со следующим обычным Firefox каждые несколько выпусков — примеры версий ESR включают Firefox 47, 52 и 60. В любой момент времени доступно не более двух версий ESR; jQuery поддерживает их оба. Посетите сайт Mozilla для получения дополнительной информации.
Если вам нужно поддерживать старые браузеры, такие как Internet Explorer 6-8, Opera 12.1x или Safari 5.1+, используйте jQuery 1.12.
Неподдерживаемые браузеры
Хотя jQuery может работать без серьезных проблем в старых версиях браузеров, мы не тестируем в них активно jQuery и, как правило, не исправляем ошибки, которые могут в них появиться.
Точно так же jQuery не исправляет ошибки в предварительных версиях браузеров, таких как бета-версии или выпуски для разработчиков. Если вы обнаружите ошибку с jQuery в предварительной версии браузера, вы должны сообщить об ошибке поставщику браузера.
О поддержке браузера
jQuery постоянно тестируется со всеми поддерживаемыми браузерами с помощью модульных тестов. Однако веб-страница, использующая jQuery, может не работать в том же наборе браузеров, если ее собственный код использует (или становится жертвой) поведения, зависящего от браузера. Для полной поддержки браузера необходимо тестирование. Сайт разработчика Microsoft Edge предоставляет виртуальные машины для тестирования множества различных версий Internet Explorer. Более старые версии других браузеров можно найти на oldversion.com.
Только самая последняя версия jQuery тестируется и обновляется для исправления ошибок или добавления функций. Пользователи более старых версий, обнаружившие ошибку, должны выполнить обновление до последней выпущенной версии, чтобы определить, исправлена ли ошибка. Плагин jQuery Migrate может быть полезен для выявления и устранения проблем во время обновления версии.
О совместимости селектора CSS
Независимо от того, поддерживает ли браузер селекторы CSS, все селекторы, перечисленные на api.jquery.com/category/selectors/, будут возвращать правильный набор элементов при передаче в качестве аргумента функции jQuery
.
, применяемые с помощью метода jQuery .css ()
, зависят от уровня поддержки браузера. В общем, jQuery не пытается преодолеть ограничения стилей рендеринга браузера.(Единственное исключение — непрозрачность
, которую jQuery «прокладывает» для альтернативной реализации старого Internet Explorer.) Кроме того, до версии 1.8 jQuery не нормализует свойства с префиксом поставщика.
Сенсорный, отзывчивый и полностью настраиваемый скрипт jQuery для лайтбокса
Комбинация переходов jQuery и CSS, чтобы оживить способ открытия модального окна.
Lorem ipsum dolor sit amet, conctetur adipiscing elit.Pellentesque auctor nibh eu nibh scelerisque malesuada. Морби моллис элеифенд турпис. Mauris conquat convallis volutpat. Целое число quis erat vehicleula, molestie nulla vel, sagittis odio. Quisque hendrerit eleifend magna, sit amet dictum odio condimentum а. Proin et ipsum venenatis, elementum sem convallis, pellentesque elit. Маурис конге velit porttitor dui condimentum porttitor.Aenean pretium suscipit ante в импердиете.
Nam vitae suscipit metus, eget volutpat quam. Ut et sem nunc. Vivamus erat leo, аукционист в neque non, malesuada conctetur neque. Ut ac purus est. Quisque molestie pharetra sem sit amet ornare. Nam eu felis in nisl lacinia iaculis. Pellentesque ut lobortis lacus. Etiam ut eros non dui ultrices бессердечие.
Ut pulvinar sem gravida porta ullamcorper. Pellentesque laoreet tellus eu egestas tempor. Ut nec lobortis nulla. Энейский тинцидант eu eros eget tincidunt. Vivamus ac lacinia mi, ut varius justo. Praesent eu ante vel velit iaculis aliquam sit amet vestibulum purus. Fusce molestie enim eros. Пеллентеск justo sem, pharetra vel ligula non, euismod elementum toror.Morbi dui ligula, хрип nec dignissim a, malesuada feugiat massa.
Cras non lobortis mauris. Меценат id placerat est, ac lobortis nisi. Aenean dapibus arcumodo magna tristique, et facilisis диам аликвам. Cum sociis natoque penatibus et magnis disparturient montes, nascetur ридикулус мус.Fusce a vestibulum erat, nec ornare libero. Proin aliquam, neque vel mattis euismod, toror lacus tempus turpis, ac vulputate augue nisl eget sem. Целое число в порттиторе Маурис.
wp-includes / class-wp-block.php: WP_Block :: render () | Создает выходные данные рендеринга для блока. |
wp-includes / script-loader.php: wp_enqueue_editor_block_directory_assets () | Помещает в очередь ресурсы, необходимые для каталога блоков, в редакторе блоков. |
wp-includes / script-loader.php: enqueue_editor_block_styles_assets () | Функция, отвечающая за постановку в очередь ресурсов, необходимых для работы стилей блоков в редакторе. |
wp-includes / script-loader.php: wp_enqueue_registered_block_scripts_and_styles () | Ставит в очередь зарегистрированные блочные сценарии и стили в зависимости от текущего визуализированного контекста (постановка в очередь только сценариев редактора в контексте редактора). |
wp-admin / включает / post.php: the_block_editor_meta_boxes () | Отображает формы метабоксов. |
wp-admin / включает / meta-box.php: register_and_do_post_meta_boxes () | Регистрирует мета-блоки сообщений по умолчанию и запускает действия |
wp-admin / includes / class-wp-privacy-policy-content.php: WP_Privacy_Policy_Content :: notice () | Добавьте уведомление со ссылкой на руководство при редактировании страницы политики конфиденциальности. |
wp-includes / general-template.php: wp_enqueue_code_editor () | Поставить в очередь ресурсы, необходимые редактору кода для заданных настроек. |
wp-includes / widgets / class-wp-widget-media-gallery.php: WP_Widget_Media_Gallery :: enqueue_admin_scripts () | Загружает необходимые медиа-файлы для медиа-менеджера и сценарии для медиа-виджетов. |
wp-includes / widgets / class-wp-widget-custom-html.php: WP_Widget_Custom_HTML :: enqueue_admin_scripts () | Загружает необходимые сценарии и стили для элемента управления виджетами. |
wp-includes / widgets / class-wp-widget-text.php: WP_Widget_Text :: enqueue_admin_scripts () | Загружает необходимые сценарии и стили для элемента управления виджетами. |
wp-includes / widgets / class-wp-widget-media-audio.php: WP_Widget_Media_Audio :: enqueue_admin_scripts () | Загружает необходимые медиа-файлы для медиа-менеджера и сценарии для медиа-виджетов. |
wp-includes / widgets / class-wp-widget-media-audio.php: WP_Widget_Media_Audio :: enqueue_preview_scripts () | Поставить в очередь сценарии предварительного просмотра. |
wp-includes / widgets / class-wp-widget-media-video.php: WP_Widget_Media_Video :: enqueue_preview_scripts () | Поставить в очередь сценарии предварительного просмотра. |
wp-includes / widgets / class-wp-widget-media-video.php: WP_Widget_Media_Video :: enqueue_admin_scripts () | Загружает необходимые сценарии и стили для элемента управления виджетами. |
wp-includes / widgets / class-wp-widget-media.php: WP_Widget_Media :: enqueue_admin_scripts () | Загружает необходимые сценарии и стили для элемента управления виджетами. |
wp-includes / widgets / class-wp-widget-media-image.php: WP_Widget_Media_Image :: enqueue_admin_scripts () | Загружает необходимые медиа-файлы для медиа-менеджера и сценарии для медиа-виджетов. |
wp-includes / theme.php: the_custom_header_markup () | Печатает разметку для настраиваемого заголовка. |
wp-includes / customize / class-wp-customize-selected-refresh.php: WP_Customize_Selective_Refresh :: enqueue_preview_scripts () | Ставит в очередь сценарии предварительного просмотра. |
wp-включает / встраивать.php: wp_oembed_add_host_js () | Добавляет JavaScript, необходимый для взаимодействия со встроенными фреймами. |
wp-includes / customize / class-wp-customize-cropped-image-control.php: WP_Customize_Cropped_Image_Control :: enqueue () | Поставить в очередь скрипты / стили, связанные с элементами управления. |
wp-включает / класс-wp-customize-nav-menus.php: WP_Customize_Nav_Menus :: customize_preview_enqueue_deps () | Поставить в очередь скрипты для предварительного просмотра настройщика. |
wp-includes / class-wp-customize-nav-menus.php: WP_Customize_Nav_Menus :: enqueue_scripts () | Ставить скрипты и стили в очередь для панели настройщика. |
wp-admin / includes / dashboard.php: wp_dashboard_setup () | Регистрирует виджеты приборной панели. |
wp-admin / includes / class-wp-internal-pointers.php: WP_Internal_Pointers :: enqueue_scripts () | Инициализирует указатели новых функций. |
wp-admin / включает / template.php: do_accordion_sections () | Функция шаблона аккордеона Meta Box. |
wp-admin / включает / media.php: wp_media_upload_handler () | Обрабатывает процесс загрузки мультимедиа. |
wp-admin / включает / media.php: media_upload_gallery () | Извлекает устаревшую форму загрузчика мультимедиа в iframe. |
wp-admin / includes / comment.php: enqueue_comment_hotkeys_js () | |
wp-admin / включает / class-custom-image-header.php: Custom_Image_Header :: js_includes () | Установите очередь для файлов JavaScript. |
wp-admin / включает / class-custom-background.php: Custom_Background :: admin_load () | Установите очередь для файлов CSS и JavaScript. |
wp-includes / class-wp-customize-manager.php: WP_Customize_Manager :: enqueue_control_scripts () | Ставить в очередь скрипты для настройки элементов управления. |
wp-includes / class-wp-customize-manager.php: WP_Customize_Manager :: customize_preview_init () | Распечатать настройки JavaScript. |
wp-includes / general-template.php: add_thickbox () | Ставит в очередь файлы ThickBox js и css по умолчанию. |
wp-includes / functions.php: wp_auth_check_load () | Загрузите проверку аутентификации, чтобы отслеживать, находится ли пользователь в системе. |
wp-includes / class-wp-admin-bar.php: WP_Admin_Bar :: initialize () | |
wp-includes / media.php: wp_enqueue_media () | Помещает в очередь все скрипты, стили, настройки и шаблоны, необходимые для использования всех медиа-API JS. |
wp-includes / media.php: wp_video_shortcode () | Создает выходной шорткод видео. |
wp-includes / media.php: wp_playlist_scripts () | Выводит и помещает в очередь сценарии и стили по умолчанию для списков воспроизведения. |
wp-includes / media.php: wp_audio_shortcode () | Создает выходной шорткод аудио. |
wp-includes / customize / class-wp-customize-header-image-control.php: WP_Customize_Header_Image_Control :: enqueue () | |
wp-includes / customize / class-wp-customize-color-control.php: WP_Customize_Color_Control :: enqueue () | Поставить в очередь скрипты / стили для палитры цветов. |
wp-includes / class-wp-customize-widgets.php: WP_Customize_Widgets :: enqueue_scripts () | Ставит в очередь скрипты и стили для панели настройщика и экспортирует данные в JavaScript. |
wp-includes / class-wp-customize-widgets. php: WP_Customize_Widgets :: customize_preview_enqueue () | Ставит в очередь скрипты для предварительного просмотра настройщика. |
wp-включает / класс-wp-редактор.php: _WP_Editors :: enqueue_scripts () |
jquery-подобная библиотека для python — документация pyquery 1.2.4
pyquery позволяет делать jquery-запросы к xml-документам. API максимально похож на jquery. pyquery использует lxml для быстрого xml и html манипуляции.
Это не (или, по крайней мере, еще не) библиотека для создания или взаимодействия с код javascript. Мне просто понравился jquery API, и я пропустил его в python, поэтому я сказал себе: «Эй, давай сделаем jquery на Python».Вот результат.
Его можно использовать для многих целей, одна идея, которую я мог бы попробовать в будущем, — используйте его для создания шаблонов с использованием чистых шаблонов http, которые вы изменяете с помощью pyquery. Я также могу использоваться для разметки веб-страниц или тематических приложений с Избавление.
Проект активно развивается в репозитории git на Github. я иметь политику предоставления push-доступа всем, кто этого хочет, а затем проверять что он делает. Так что, если вы хотите внести свой вклад, просто напишите мне.
Сообщайте об ошибках в проблеме с github трекер.
Вы можете использовать класс PyQuery для загрузки XML-документа из строки, lxml документ, из файла или с URL:
>>> из pyquery импортировать PyQuery как pq >>> из lxml import etree >>> импортировать urllib >>> d = pq (" ") >>> d = pq (etree.fromstring (" ")) >>> d = pq (url = 'http: //google.com/') >>> # d = pq (url = 'http: // google.com / ', opener = lambda url, ** kw: urllib.urlopen (url) .read ()) >>> d = pq (имя_файла = путь_к_html_файлу)
Теперь d похож на $ в jquery:
>>> d ("# привет") [] >>> p = d ("# привет") >>> печать (p. html ()) Привет мир ! >>> p.html ("вы знаете, Python круче") [
] >>> печать (p.html ()) вы знакомы с камнями Python >>> print (стр.текст()) ты знаешь питон скалы
Вы можете использовать некоторые псевдоклассы, доступные в jQuery, но которые не являются стандартными в css, например: first: last: even: odd: eq: lt: gt: checked : selected: файл:
>>> d ('p: первый') []
Во-первых, здесь есть документация по Sphinx. Затем для получения дополнительной документации по API вы можете использовать веб-сайт jquery. Ссылка, которую я сейчас использую для API, — это … шпаргалка по цветам. Тогда вы всегда можете посмотреть код.
Удаление jQuery из интерфейса GitHub.com
Недавно мы завершили веху, когда смогли отказаться от jQuery как зависимости от кода внешнего интерфейса для GitHub.com. Это знаменует собой конец постепенного, продолжавшегося многие годы перехода к все большему отключению от jQuery, пока мы не смогли полностью удалить библиотеку. В этом посте мы расскажем немного из истории того, как мы начали в первую очередь полагаться на jQuery, как мы поняли, когда он больше не нужен, и укажем, что вместо того, чтобы заменить его другой библиотекой или фреймворком, мы были мы можем достичь всего, что нам нужно, с помощью стандартных API-интерфейсов браузера.
Почему jQuery имел смысл на раннем этапе
GitHub.com подключил jQuery 1.2.1 в качестве зависимости в конце 2007 года. Для некоторого контекста это было за год до того, как Google выпустила первую версию своего браузера Chrome. Не существовало стандартного способа запроса элементов DOM с помощью селектора CSS, не существовало стандартного способа анимации визуальных стилей элемента, а интерфейс XMLHttpRequest, впервые примененный в Internet Explorer, был, как и многие другие API-интерфейсы, несовместим между браузерами.
jQuery упростил управление DOM, определение анимации и выполнение запросов «AJAX» — по сути, он позволил веб-разработчикам создавать более современные, динамичные взаимодействия, которые выделялись бы среди остальных. Что наиболее важно, функции JavaScript, встроенные в один браузер с помощью jQuery, обычно работают и в других браузерах. В те ранние дни GitHub, когда большинство его функций все еще дорабатывались, это позволяло небольшой команде разработчиков быстро создавать прототипы и выпускать новые функции без необходимости настраивать код специально для каждого веб-браузера.
Простой интерфейс jQuery также послужил планом для создания библиотек расширений, которые позже будут служить строительными блоками для остальной части GitHub.com интерфейс: pjax и facebox.
Мы всегда будем благодарны Джону Ресигу и участникам jQuery за создание и поддержку такой полезной и, на то время, важной библиотеки .
Веб-стандарты более поздних лет
За прошедшие годы GitHub превратился в компанию с сотнями инженеров и специальной командой, постепенно сформированной, чтобы взять на себя ответственность за размер и качество кода JavaScript, который мы предоставляем веб-браузерам. Одна из вещей, на которую мы постоянно обращаем внимание, — это технический долг, а иногда технический долг растет из-за зависимостей, которые когда-то обеспечивали ценность, но стоимость которых со временем снижалась.
Когда дело дошло до jQuery, мы сравнили его с быстрым развитием поддерживаемого веб-стандарта в современных браузерах и пришли к выводу:
- Шаблон
$ (селектор)
можно легко заменить наquerySelectorAll ()
; - Переключение имен классов CSS теперь может быть выполнено с помощью Element.classList;
- CSS теперь поддерживает определение визуальной анимации в таблицах стилей, а не в JavaScript;
-
$ Запросы .ajax
могут выполняться с использованием Fetch Standard; - Интерфейс
addEventListener ()
достаточно стабилен для кроссплатформенного использования; - Мы могли бы легко инкапсулировать шаблон делегирования событий с помощью облегченной библиотеки;
- Некоторый синтаксический сахар, предоставляемый jQuery, стал излишним с развитием языка JavaScript.
Кроме того, синтаксис цепочки не соответствовал тому, как мы хотели писать код в будущем. Например:
$ ('. Js-widget')
.addClass ('загружается')
.show ()
Этот синтаксис прост в написании, но по нашим стандартам он не очень хорошо передает намерение. Ожидал ли автор на этой странице один или несколько элементов js-widget
? Кроме того, если мы обновим разметку нашей страницы и случайно пропустим js-widget
classname, будет ли исключение в браузере сообщать нам, что что-то пошло не так? По умолчанию jQuery молча пропускает все выражение, если ничто не соответствует исходному селектору; но для нас такое поведение было скорее ошибкой, чем особенностью.
Наконец, мы хотели начать аннотировать типы с помощью Flow для выполнения проверки статического типа во время сборки, и мы пришли к выводу, что синтаксис цепочки не подходит для статического анализа, поскольку почти каждый результат вызова метода jQuery одинаков. тип. Мы выбрали альтернативы Flow, потому что в то время такие функции, как режим @flow weak
, позволяли нам постепенно и эффективно начинать применять типы к кодовой базе, которая была в значительной степени нетипизированной.
В целом, отделение от jQuery означало бы, что мы могли бы больше полагаться на веб-стандарты, сделать веб-документацию MDN де-факто документацией по умолчанию для наших веб-разработчиков, поддерживать более устойчивый код в будущем и в конечном итоге отказаться от 30-килобайтной зависимости от наши упакованные пакеты, ускоряющие время загрузки страницы и время выполнения JavaScript.
Инкрементальная развязка
Даже имея в поле зрения конечную цель, мы знали, что невозможно просто выделить все ресурсы, которые нам приходилось переписывать, от jQuery до ванильного JS. Во всяком случае, такая поспешная работа, скорее всего, приведет к множеству ухудшений в функциональности сайта, которые нам позже придется устранить. Вместо этого мы:
- Настройте показатели, которые отслеживают соотношение вызовов jQuery, используемых на общую строку кода, и отслеживают этот график с течением времени, чтобы убедиться, что он либо остается постоянным, либо снижается, а не растет.
- Мы не рекомендуем импортировать jQuery в любой новый код. Чтобы облегчить это с помощью автоматизации, мы создали eslint-plugin-jquery, который не прошел бы проверки CI, если бы кто-нибудь попытался использовать функции jQuery, например
$ .ajax
. - Теперь в старом коде было много нарушений правил eslint, все из которых мы аннотировали конкретными правилами
eslint-disable
в комментариях к коду. Для читателя этого кода эти комментарии послужат четким сигналом того, что этот код не отражает наши текущие методы кодирования. - Мы создали бот для запроса на включение, который оставлял комментарий для проверки запроса на перенос, отправляя пинг нашей команде всякий раз, когда кто-то пытался добавить новое правило eslint-disable . Таким образом, мы бы вовлеклись в обзор кода раньше и предложили альтернативы.
- У большого количества старого кода была явная связь с внешними интерфейсами плагинов jQuery pjax и facebox, поэтому мы сохранили их интерфейсы относительно такими же, в то время как мы внутренне заменили их реализацию на ванильный JS. Статическая проверка типов помогла нам больше доверять этим рефакторингам.
- Множество старого кода, связанного с rails-поведением, нашим адаптером для подхода Ruby on Rails к «ненавязчивому» JS, таким образом, чтобы они прикрепляли обработчик жизненного цикла AJAX к определенным формам:
// УСТАРЕВШИЙ ПОДХОД $ (документ) .on ('ajaxSuccess', 'form.js-widget', function (event, xhr, settings, data) { // вставляем данные ответа где-нибудь в DOM })
Вместо того, чтобы переписывать все эти сайты вызовов сразу в соответствии с новым подходом, мы решили запускать поддельных событий жизненного цикла
ajax *
и сохранять эти формы, отправляющие свое содержимое асинхронно, как и раньше; только на этот раз для внутреннего использования использоваласьfetch ()
. - Мы поддерживали пользовательскую сборку jQuery, и всякий раз, когда мы определяли, что мы больше не используем определенный модуль jQuery, мы удаляли его из пользовательской сборки и выпускали более тонкую версию. Например, после того, как мы удалили окончательное использование специфичных для jQuery псевдоселекторов CSS, таких как
: visible
или: checkbox
, мы смогли удалить модуль Sizzle; и когда последний вызов$ .ajax
был заменен наfetch ()
, мы смогли удалить модуль AJAX.Это служило двойной цели: ускорять время выполнения JavaScript и в то же время гарантировать, что не будет создан новый код, который пытался бы использовать удаленные функции. - Мы продолжали отказываться от поддержки старых версий Internet Explorer, как только это стало возможным, как сообщает аналитика нашего сайта. Всякий раз, когда использование определенной версии IE опускалось ниже определенного порога, мы прекращали предоставлять для нее JavaScript и сосредотачивались на тестировании и поддержке более современных браузеров. Отказ от поддержки IE 8–9 на раннем этапе позволил нам использовать многие собственные функции браузера, которые в противном случае было бы трудно реализовать.
- В рамках нашего усовершенствованного подхода к созданию функций внешнего интерфейса на GitHub.com мы сосредоточились на том, чтобы максимально использовать обычную основу HTML и добавлять поведение JavaScript только в качестве прогрессивного улучшения. В результате даже те веб-формы и другие элементы пользовательского интерфейса, которые были улучшены с помощью JS, обычно также работают с отключенным JavaScript в браузере. В некоторых случаях нам удавалось полностью удалить некоторые устаревшие варианты поведения вместо того, чтобы переписывать их на ванильном JS.
Благодаря этим и подобным усилиям, объединенным на протяжении многих лет, мы смогли постепенно уменьшить нашу зависимость от jQuery до тех пор, пока не исчезла ни одна строка кода, ссылающаяся на него.
Пользовательские элементы
Одна из технологий, которая в последние годы произвела фурор, — это Custom Elements: библиотека компонентов, встроенная в браузер, что означает, что пользователю не нужно загружать, анализировать и компилировать дополнительные байты фреймворка.
Мы создали несколько пользовательских элементов на основе спецификации v0 с 2014 года.Однако, поскольку тогда стандарты все еще менялись, мы не инвестировали так много. Только в 2017 году, когда была выпущена спецификация веб-компонентов v1 и реализована как в Chrome, так и в Safari, мы начали применять пользовательские элементы в более широком масштабе.
Во время миграции jQuery мы искали шаблоны, которые подходили бы для извлечения в качестве пользовательских элементов. Например, мы преобразовали использование лицевых панелей для отображения модальных диалогов в элемент
.
Наша общая философия стремления к прогрессивному совершенствованию распространяется и на нестандартные элементы.Это означает, что мы сохраняем как можно больше контента в разметке и добавляем только поведения поверх этого. Например,
по умолчанию показывает необработанную временную метку и обновляется для перевода времени в местный часовой пояс, а
, когда он вложен в элемент
, является интерактивным. даже без JavaScript, но обновляется за счет улучшений специальных возможностей.
Вот пример того, как можно реализовать настраиваемый элемент
:
// Элемент местного времени отображает время в текущем часовом поясе пользователя
// и локаль.//
// Пример:
// 6 сентября 2018 г.
//
class LocalTimeElement расширяет HTMLElement {
static get ObservableAttributes () {
возврат ['datetime']
}
attributeChangedCallback (attrName, oldValue, newValue) {
if (attrName === 'datetime') {
const date = новая дата (новое значение)
this. textContent = date.toLocaleString ()
}
}
}
if (! window.customElements.get ('местное время')) {
window.LocalTimeElement = LocalTimeElement
окно.customElements.define ('местное время', LocalTimeElement)
}
Один из аспектов веб-компонентов, который мы с нетерпением ждем внедрения, — это Shadow DOM. Мощная природа Shadow DOM может открыть множество возможностей для Интернета, но это также усложняет полифил. Поскольку полифиллинг сегодня влечет за собой снижение производительности даже для кода, который манипулирует частями DOM , не связанными с веб-компонентами, для нас нереально начать использовать его в продакшене.
Полифиллы
Это полифиллы, которые помогли нам перейти к использованию стандартных функций браузера. Мы стараемся обслуживать большинство этих полифилов только в случае крайней необходимости, то есть для устаревших браузеров как часть отдельного пакета JavaScript для совместимости.
Авторы
Инженер по приложениям
Инженер по приложениям
Инженер по приложениям
Инженер по приложениям
Создание причудливых и анимированных якорей с помощью jQuery — 4 демонстрации
HTML-ссылки и jQueryПростые ссылки HTML плоские, статичные и утомительные.Вы можете добавлять цвета к ссылкам, используя свойства CSS / CSS3. А как насчет добавления анимированных эффектов к этим якорным тегам HTML?
Хотя простые ссылки могут хорошо выглядеть на определенных нишевых веб-сайтах, таких как финансовые, политические / НОВОСТИ и т. Д. Анимированные ссылки можно использовать на забавных веб-сайтах, таких как игры, мобильные телефоны и т. Д., В то время как простая анимация также может использоваться на «серьезных» нишевых веб-сайтах. .
В этом руководстве я покажу вам примеры подключаемого модуля на основе jQuery, который вы можете использовать для создания HTML-ссылок с четырьмя типами эффектов. Плагин можно скачать с сайта Github здесь (zip-файл с пакетом плагина). Вы также можете получить необходимые файлы JS / CSS плагина, просмотрев исходный код демонстрационных страниц ниже.
Демонстрация 3D-эффекта с переходом по HTML-ссылкамВ этом примере несколько тегов привязки используются для создания ссылок с трехмерным эффектом вращения. Взгляните на демонстрацию и код:
См. Онлайн-демонстрацию и кодЧтобы настроить этот подключаемый модуль для использования в вашем проекте, просто загрузите пакет и получите файлы JS и CSS.Поместите их в желаемое место и укажите файл CSS в разделе
и файл JS чуть выше тега :Файл CSS:
Файлы JS jQuery и плагина:
В разделе разметки создается несколько ссылок с определенными классами CSS, которые также помещаются в раздел