Обновление jQuery 1.4.2 до 1.9.1 - программирование

Обновление jQuery 1.4.2 до 1.9.1

Мы использовали jQuery 1.4.2 в нашем веб-приложении. Недавно было предложено перейти на более новую версию. До сих пор мы думаем об обновлении до 1.9.1, поскольку нам необходимо поддерживать IE7 и IE8. В нашем приложении используется куча плагинов, например. fancybox, куки, подвыпи, jcarousel и куча других. Кроме того, у нас есть много файлов script, возможно, около 50 файлов. а затем некоторые скрипты, встроенные в файлы. Я чувствую, что это будет катастрофой! У кого-нибудь есть совет? Мы пока не обновляемся до 1.9.1. Если я хочу, я могу убедить менеджеров перейти на другую версию. Какая наша самая безопасная ставка? Просьба сообщить.

Спасибо!

4b9b3361

Ответ 1

Просто посмотрите на устаревшие функции, все еще находящиеся в вашем коде; большие, на которые нужно обратить внимание, - это .live() и .delegate(), которые были заменены на .on(), .attr(), для которых .prop() является заменой, и .browser(). Я обновлял свой код по мере появления новых версий, и это было довольно просто (около 20 тыс. Строк js), поэтому у вас не должно быть никаких проблем. Просто начните с функций, о которых я упомянул, и я думаю, что это решит большинство проблем. Затем посмотрите плагин Migrate.

Ответ 2

Вы можете попробовать использовать jQuery Migrate plugins, который используется для обнаружения и восстановления API или функций, которые были устарел в jQuery и удален с версии 1.9.

Ответ 3

В дополнение к frenchie ответьте, если ваше приложение вводит пользовательские атрибуты html из кода, на стороне клиента эти атрибуты могут быть прочитаны только с использованием attr() вместо нового prop().

В соответствии с моим нынешним пониманием это связано с тем, что атрибуты атрибутов имя-значение для элементов распознаются только как свойства, когда они либо являются родными для типа элемента DOM, либо были добавлены с использованием того же метода jQuery-поддержки (на стороне клиента).

Выполняя аналогичное обновление jQuery в первый раз, я нашел эту ветку о различиях между attr и new prop очень интересным: prop-vs-attr

Ответ 4

  • Не используйте опцию offset в свойствах позиции, например. код $element.position({my: 'center center', at: 'center center', offset: '5 -10'}) следует заменить на $element.position({my: 'center center', at: 'center+5 center-10'}).
  • Не используйте $element.bind(), $element.live(), $element.delegate() для назначения обработчика событий, используйте $element.on().
  • Не используйте обход браузера с помощью $.browser, попробуйте вместо этого использовать функцию обнаружения ($.support).
  • Не используйте deferred.isRejected(), deferred.isResolved(), вместо этого используйте deferred.state(). Не используйте deferred.pipe(), вместо этого следует использовать метод deferred.then().
  • Не используйте метод $elements.size(), вместо этого используйте свойство $elements.length. Метод .size() функционально эквивалентен свойству .length; однако свойство .length является предпочтительным, поскольку оно не имеет накладных расходов на вызов функции.
  • Состояние флажка/радио в событии .trigger() ed "click" теперь имеет то же состояние, что и в инициированном пользователем действии.
  • Изменено соглашение об именах для клавиш .data(), например ui-dialog вместо dialog. (http://jqueryui.com/upgrade-guide/1.9/#changed-naming-convention-for-data-keys).
  • Не используйте $.ui.contains(), используйте $.contains() вместо этого.
  • Каждый экземпляр виджета уже имеет уникальный идентификатор this.uuid и пространство имен событий this.eventNamespace = "." + this.widgetName + this.uuid. Не создавайте подобные вещи вручную.

Оригинальные руководства по обновлению и полный список изменений: