Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   переход на новую версию jQuery (https://javascript.ru/forum/jquery/18251-perekhod-na-novuyu-versiyu-jquery.html)

severum 23.06.2011 10:54

переход на новую версию jQuery
 
Для совместимости (и избавления от конфликтов) судя по всему приходится переписывать ряд скриптов со старых версий mootools и jQuery на новую версию jQuery. На jQuery не писал и сразу и вообще на JS редко.

В консоле сыпется много ошибок на строчки типа:
$("xxx").style.display = "none";
помогает замена на:
$("#xxx").css("display", "none");

1. Правильно ли я понимаю что в новой версии убрали .style (в скриптах встречается и .style и .css)?
2. Почему раньше видимо работало $("xxx"), а теперь в основном только $("#xxx").
3. местами перестало работать .innerHTML, я заменяю на .html(), почему это может быть?

заранее спасибо.

Sweet 23.06.2011 11:20

Цитата:

Сообщение от severum
Правильно ли я понимаю

Совсем не понимаешь. Более того, у тебя каша в голове.
Я может чего не знаю о jQuery, но по-моему он всегда возвращал jQuery-наборы, а не дом элементы, и всегда принимал css-селекторы. $("id") - это не jQuery.

severum 23.06.2011 11:35

спасибо. Понятно. Это значит в скриптах микс. Даже в составе одного скрипта.
Еще в части скриптов в начале стоит jQuery.noConflict(); Я убрал.
заменил jQuery(document).ready( на $("document").ready(
Это что-то меняет?

SlavaPav 23.06.2011 12:21

Да. Функция jQuery принимает либо селектор CSS в виде строки, либо DOM елемент переданный в фунцкию напрямую. В случае $("document"), ты передаешь CSS селектор, и jQuery пытается найти в элемент 'document' ( само собой безуспешно). jQuery.noConfilict() возвращает имени '$' его начальное значение, то есть если ты пользуешься двумя библиотеками, стоит воспользоваться данной функцией для избежания конфликтов. К коллекциям jQuery можно обращаться как к элементам DOM достаточно извлечь единичный элемент из коллекции: jQuery('.someclass')[0].style.display = 'none'

severum 23.06.2011 13:01

Спасибо. Это я уже усвоил. Пытаюсь пойти по более короткому пути и сохранить большую часть кода.

В начале некоторых файлов содержащих всякие функции стоит jQuery.noConflict();
При этом другие файлы с функциями перестают работать.

Какая область действия этой функции? Может ее стоит запихнуть в каждую конкретную функцию и потом выключать?

Мне кажется, что наличие ее в начале одного из файлов (содержащем только функции вызывающиеся из других файлов) который грузится в некий момент времени в html, вырубает часть скриптов загружаемых позже.

Нельзя же ее вызывать в начале каждого файла где где хочется применить (даже выключая в конце, чего сейчас тоже не делается).
Функции которые потом может кто-то вызвать могут использовать разный $, а состояние его на момент вызова будет неизвестным..

severum 23.06.2011 13:06

Вернее даже логичнее получается вызвать jQuery.noConflict() сразу после загрузки самого jQuery. Например, дописать в сам файл.
А потом уже детально в зависимости от того, что в каком скрипте используется включать его или нет.

severum 23.06.2011 14:36

Всем спасибо. Заработало. Сделал так как написал.
1. вначале грузится скрипт mootools,
2. потом jQuery и в нем тут же восстанавливается $.
3. в скриптах где нужен jQuery поставляется jQuery вместо $

SlavaPav 23.06.2011 14:43

Ты по прежнему можешь использовать $ вместо jQuery:
(function($) {
    $('.class')
}(jQuery));

severum 23.06.2011 14:57

ок. спасибо.


Часовой пояс GMT +3, время: 00:17.