14 полезных методов, примечаний и лучших упражнений jQuery

методы jquery

От автора:

Если и есть что-то плохое в jQuery, это то, что начальный уровень настолько низок, что поражает тех, кто совершенно не знаком с JavaScript. С одной стороны, это фантастика. Однако, с обратной стороны, следствием этого является поверхностные знания и, если честно, отвратительно плохой код (который я и сам писал!).

Но это нормально; ужасающе жалкий код, который заставил бы вздохнуть даже вашу бабушку – что-то вроде обряда посвящения. Главное – совершить восхождение на эту гору, и это как раз то, что мы сегодня обсудим в этом учебнике.

1. Методы возврата объекта jQuery Object

Важно помнить, что большинство методов возвратят объект jQuery. Это чрезвычайно полезно и позволяет строить широко используемые цепочки функций.

Зная, что объект jQuery всегда возвращается, время от времени мы можем пользоваться этим для удаления избыточного кода. Например, рассмотрим следующее:

Причина, по которой мы "кэшируем" место размещения элемента someDiv, состоит в ограничении количества раз, когда мы вынуждены прослеживать DOM этого элемента.

Код вверху полностью хорош; однако вы могли бы почти так же легко объединить две строки в одну для достижения того же итога.

Таким образом, мы все еще скрываем элемент someDiv, но этот метод так же, как мы и узнали, возвращает объект jQuery — на который мы затем ссылаемся через переменную someDiv.

2. Селектор Find

Если ваши селекторы не настолько смехотворно плохи, jQuery проделает фантастическую работу по их оптимизации, и, в общем, вам не нужно слишком о них беспокоиться. Однако, наряду со сказанным, вы можете позволить себе некоторое количество усовершенствований, слегка улучшающих производительность вашего скрипта.

Одним из таких решений является использование, когда это возможно, метода find(). Основная идея – это отход от принуждения jQuery использовать движок Sizzle, когда это не является необходимым. Конечно, будут моменты, когда это невозможно — и это нормально; но, если вам не нужны дополнительные издержки, не нарывайтесь на них.

У последних современных браузеров имеется поддержка QuerySelectorAll,что позволяет передавать селекторы, аналогичные CSS, не нуждаясь в jQuery. Сам по себе jQuery с тем же успехом использует эту функцию, когда это возможно.

Однако старые браузеры, а именно IE6/IE7, естественно, не обеспечивают поддержку этой функции. Значит, такие более сложные селекторы запускают движок jQuery Sizzle – несомненно замечательный, но требующий больших ресурсов.

Sizzle – блестящая реализация, которую я, возможно, никогда не пойму. Тем не менее, если вкратце, он сначала берет селектор и превращает его в "массив", состоящий из каждого компонента вашего селектора.

Затем справа налево начинает расшифровывать каждый элемент стандартными регулярными выражениями. Кроме всего прочего, еще это означает, что крайняя справа часть вашего селектора должна быть как можно более конкретной — например, id или название тэга.

Итак, когда это возможно:

Старайтесь сделать свои селекторы простыми

Используйте метод find(). Таким образом, вместо использования Sizzle, можно продолжить применять встроенные функции браузера.

Как можно лучше оптимизируйте правую часть селектора при использовании Sizzle.

Контекст вместо этого?

Также можно использовать в своих селекторах текущий контекст, например:

Этот код предписывает jQuery упаковать в коллекцию множество всех элементов класса someElements — являющихся дочерними элементами someContainer — внутри jQuery. Использование контекстов – полезный способ ограничения обхода узлов DOM, поскольку "за кулисами" jQuery в этом случае использует метод find.

Подтверждение:

3. Не злоупотребляйте $(this)

Не зная о всевозможных свойствах и функциях DOM, можно легко без нужды злоупотребить объектом jQuery. Например:

p>Если объект jQuery нужен вам только для того, чтобы иметь доступ к атрибуту id тэга-привязки, это расточительно. Лучше придерживаться "обычного" JavaScript’а.

Пожалуйста, обратите внимание на то, что есть три атрибута, к которым всегда следует получать доступ c помощью jQuery: "src," "href," и "style.". Для этих атрибутов в старых версиях IE требуется использование getAttribute.

Подтверждение:

Множественные объекты jQuery

Еще хуже процесс неоднократных запросов к DOM и создания множественных объектов jQuery.

Будем надеяться, что вы уже осведомлены о том, насколько это неэффективный код. Если нет, ничего страшного; все мы учимся. Решение состоит либо в реализации последовательности, либо в "кэшировании" местоположения #elem.

4. Сокращенная запись метода jQuery Ready

Обработка события ready документа при помощи jQuery до смешного просто.

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

Хотя последняя отчасти менее удобочитаема, два отрывка вверху идентичны. Не верите? Просто взгляните в исходники jQuery.

rootjQuery – просто ссылка на корневой jQuery(document). При передаче селектора функции jQuery она определит тип селектора: string, tag, id, function, и т.д. Если была передана функция, jQuery вызывает свой метод ready() и передает вашу анонимную функцию как селектор.

5. Создавайте безопасный код

Разрабатывая код для дистрибуции, очень важно исключить любой возможный конфликт имен. Что произойдет, если какой-то скрипт, импортированный вслед за вашим, тоже имел бы функцию $? Полная фигня!

Решение – либо вызвать jQuery noConflict(), либо хранить свой код в самовызываемой анонимной функции, а затем передать ей jQuery.

Метод 1: NoConflict

Будьте осторожны с этим методом и постарайтесь не использовать его при дистрибуции своего кода. Он реально собьет с толку пользователя вашего скрипта!

Метод 2: Передача jQuery

Последние круглые скобки внизу автоматически вызывают функцию – function(){}(). Однако при вызове функции мы также передаем jQuery, который затем представлен $.

Метод 3: Передача $ посредством метода Ready

6. Будьте разумны

Помните – jQuery это просто JavaScript. Не думайте, что он способен исправить ваш плохой код.

Это значит, что если мы должны оптимизировать такие вещи, как предложения for из JavaScript, то же самое касается метода jQuery each. А почему нет? Это просто вспомогательный метод, который затем «за кулисами» создает предложение for.

Ужасно

Ищет anotherDiv в каждой итерации цикла

Дважды подхватывает свойство innerHTML

Создает новый объект jQuery только для того, чтобы иметь доступ к тексту элемента.

Гораздо лучше

Таким образом, единственное действие, которое мы выполняем внутри метода each (for) – это добавление в массив нового ключа…в противоположность запросу к DOM, использованию дважды свойства innerHTML элемента и т.д.

Этот совет больше касается вообще JavaScript, чем конкретно jQuery. Главное помнить, что jQuery не исправляет плохой код.

Фрагменты документа

В подобных ситуациях имеется альтернатива– использование фрагментов документа.

Суть в том, что существует множество способов выполнения таких простых задач, как эта, и каждый имеет свои преимущества и недостатки в плане производительности от браузера к браузеру. Чем больше вы придерживаетесь jQuery и изучаете JavaScript, тем чаще можете заметить, что обращаетесь к встроенным свойствам и методам JavaScript. Если так, то это отлично!

jQuery обеспечивает поразительный уровень абстракции, и его преимуществами вы должны пользоваться, но это не значит, что вас этими методами заставляют пользоваться. Например, в вышеуказанном фрагменте мы употребляем метод jQuery each. Если вы предпочтете использовать вместо него предложение for или while, тоже получится хорошо!

Наряду со сказанным помните о том, что разработчики jQuery тщательно оптимизировали эту библиотеку. Споры вокруг jQuery each() против "родного" предложения for глупы и банальны. Если вы в своем проекте используете jQuery, сэкономьте время и пользуйтесь его собственными вспомогательными методами. Они и созданы для этого!

7. Методы AJAX

Если вы только начинаете углубляться в jQuery, различные доступные в нем методы AJAX, на которые вы могли наткнуться, немного обескураживают; а не должны. Фактически, большинство из них – просто вспомогательные методы, ведущие прямиком к $.ajax.

get

getJSON

post

ajax

Как пример давайте рассмотрим getJSON, который позволяет нам получить JSON.

За кулисами этот метод сначала вызывает $.get.

$.get затем компилирует пересланные данные и заново вызывает "хозяйский" (как бы) метод $.ajax.

Наконец, $.ajax выполняет большое количество работы, чтобы дать нам возможность успешно произвести асинхронные запросы через все браузеры!

Это значит – вы можете с тем же успехом использовать метод $.ajax напрямую и исключительно для всех запросов AJAX. Прочие методы – просто вспомогательные, которые, как бы то ни было, в конце концов делают то же самое. Итак, если хотите, исключите посредника. Это в любом случае незначительная проблема.

Поистине высший класс:

Еще эффективнее:

8. Организация доступа к встроенным свойствам и методам

Итак, вы немного выучили JavaScript и узнали, что, к примеру, к значениям атрибутов тэгов-привязок можно получить доступ напрямую:

Единственная проблема состоит в том, что это, похоже, не работает, когда вы при помощи jQuery делаете ссылки на элементы DOM, верно? Ну конечно, нет.

Не заработает

Итак, если вам понадобится организовать доступ к атрибуту href (или для этого к любому другому "родному" свойству или методу), то у вас имеется некоторое количество вариантов.

Методget чрезвычайно полезен, так как может преобразовать коллекцию jQuery в массив.

9. Отслеживайте запросы AJAX при помощи PHP

Естественно, для большого количества своих проектов нельзя полагаться только на JavaScript для таких вещей, как проверка данных (валидация) или запросы AJAX. А что если JavaScript отключен? Поэтому обычная методика – это определить, был ли сделан запрос AJAX на стороне сервера с помощью используемого вами языка программирования.

jQuery делает эту задачу простой, устанавливая заголовок из метода $.ajax.

Когда заголовок установлен, мы можем использовать PHP (или любой другой язык) для его проверки и соответствующей обработки. Для этого мы проверяем значение $_SERVER[‘HTTP_X_REQUESTED_WITH’].

Оболочка

10. jQuery и $

Когда-нибудь интересовались, зачем/как можно взаимозаменяемо использовать jQuery и $? Чтобы узнать ответ, откройте исходники jQuery и прокрутите до самого конца. Там вы увидите:

Весь скрипт jQuery, конечно, упакован в самоисполняющуюся функцию, которая позволяет скрипту как можно сильнее ограничить количество глобальных переменных. Тем не менее, это также значит, что объект jQuery недоступен вне анонимной функции-упаковщика.

Чтобы это исправить, jQuery публикуется в глобальном объекте window и, в процессе, еще создается псевдоним — $.

11. Условная загрузка jQuery

Стандартный текст HTML5 Boilerplate предлагает изящную однострочную конструкцию, которая загрузит локальную копию jQuery в случае, если по какой-то причине выбранный вами CDN не функционирует.

"Озвучим" вышеуказанный код: если window.jQuery не определен, должна существовать проблема с закачиванием скрипта из CDN. В этом случае переходим к правой части оператора && и вставляем скрипт, ссылающийся на локальную версию jQuery.

12. Фильтры jQuery

Примечание: jQuery.expr[‘:’] — просто псевдоним для jQuery.expr.filters.

13. Одиночная функция Hover

Что касается jQuery 1.4, мы теперь можем передать методу hover единственную одиночную функцию. До этого требовались два метода — in и out.

До:

Теперь:

Обратите внимание, что это не подход "старое против нового". Много раз вам по-прежнему понадобится передавать hover две функции, и это абсолютно приемлемо. Тем не менее, если вам нужно всего лишь переключить какой-либо элемент (или что-то вроде этого), передача одиночной анонимной функции сэкономит некоторое количество символов!

14. Передача объекта-атрибута

Начиная с jQuery 1.4 теперь можно передать объект как второй параметр функции jQuery. Это полезно, когда нужно вставить в DOM новые элементы. Например:

До:

После:

Это не только экономит несколько знаков, но также способствует тому, чтобы код стал чище. Вдобавок к атрибутам элементов мы можем даже передать специфические атрибуты и события jQuery, вроде click или text.

Спасибо за прочтение!

киберсант-вебмастер

Автор: Jeffrey Way

Редакция: Рог Виктор и Андрей Бернацкий. Команда webformyself.

E-mail: contact@webformyself.com

Проект webformyself.com — Как создать свой сайт. Основы самостоятельного сайтостроения

P.S. Хотите опубликовать интересный тематический материал и заработать? Если ответ «Да», то жмите сюда.

Метки: ,

Похожие статьи:

Комментарии Вконтакте:

Комментарии (1)