переход на новую версию jQuery
Для совместимости (и избавления от конфликтов) судя по всему приходится переписывать ряд скриптов со старых версий mootools и jQuery на новую версию jQuery. На jQuery не писал и сразу и вообще на JS редко.
В консоле сыпется много ошибок на строчки типа: $("xxx").style.display = "none"; помогает замена на: $("#xxx").css("display", "none"); 1. Правильно ли я понимаю что в новой версии убрали .style (в скриптах встречается и .style и .css)? 2. Почему раньше видимо работало $("xxx"), а теперь в основном только $("#xxx"). 3. местами перестало работать .innerHTML, я заменяю на .html(), почему это может быть? заранее спасибо. |
Цитата:
Я может чего не знаю о jQuery, но по-моему он всегда возвращал jQuery-наборы, а не дом элементы, и всегда принимал css-селекторы. $("id") - это не jQuery. |
спасибо. Понятно. Это значит в скриптах микс. Даже в составе одного скрипта.
Еще в части скриптов в начале стоит jQuery.noConflict(); Я убрал. заменил jQuery(document).ready( на $("document").ready( Это что-то меняет? |
Да. Функция jQuery принимает либо селектор CSS в виде строки, либо DOM елемент переданный в фунцкию напрямую. В случае $("document"), ты передаешь CSS селектор, и jQuery пытается найти в элемент 'document' ( само собой безуспешно). jQuery.noConfilict() возвращает имени '$' его начальное значение, то есть если ты пользуешься двумя библиотеками, стоит воспользоваться данной функцией для избежания конфликтов. К коллекциям jQuery можно обращаться как к элементам DOM достаточно извлечь единичный элемент из коллекции: jQuery('.someclass')[0].style.display = 'none'
|
Спасибо. Это я уже усвоил. Пытаюсь пойти по более короткому пути и сохранить большую часть кода.
В начале некоторых файлов содержащих всякие функции стоит jQuery.noConflict(); При этом другие файлы с функциями перестают работать. Какая область действия этой функции? Может ее стоит запихнуть в каждую конкретную функцию и потом выключать? Мне кажется, что наличие ее в начале одного из файлов (содержащем только функции вызывающиеся из других файлов) который грузится в некий момент времени в html, вырубает часть скриптов загружаемых позже. Нельзя же ее вызывать в начале каждого файла где где хочется применить (даже выключая в конце, чего сейчас тоже не делается). Функции которые потом может кто-то вызвать могут использовать разный $, а состояние его на момент вызова будет неизвестным.. |
Вернее даже логичнее получается вызвать jQuery.noConflict() сразу после загрузки самого jQuery. Например, дописать в сам файл.
А потом уже детально в зависимости от того, что в каком скрипте используется включать его или нет. |
Всем спасибо. Заработало. Сделал так как написал.
1. вначале грузится скрипт mootools, 2. потом jQuery и в нем тут же восстанавливается $. 3. в скриптах где нужен jQuery поставляется jQuery вместо $ |
Ты по прежнему можешь использовать $ вместо jQuery:
(function($) { $('.class') }(jQuery)); |
ок. спасибо.
|
Часовой пояс GMT +3, время: 00:17. |