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