Как расширить возможности jQuery
На сегодняшний день библиотека jQuery является одним из самых популярных javascript-фреймворков. Отчасти причиной этой популярности стала простота ее использования, отчасти широкая функциональность и кроссплатформенность, но, пожалуй, самая важная деталь ее популярности - это расширяемость. jQuery спроектирована таким образом, что без особого труда, ее функциональность может расширить любой, кто угодно, кто хоть немного в теме :).
Да, именно поэтому в Интернете развелось огромное кол-во плагинов для этой библиотеки (большинство не без глюков), которые выполняют всевозможные задачи. Сложно даже придумать плагин, который будет уникальным в своем роде.
Как Вы уже догадались, сегодня речь пойдет про написание плагинов и других расширений для этой библиотеки. Да, кроме плагинов для jQuery можно написать и другие вещи, которые расширят ее функциональность. Например, новый вид селектора. Но, обо всем по порядку.
Плагин для jQuery по сути, это просто метод для класса. Например, $(‘#img’).show(). Здесь show() это тоже плагин (хотя он же и метод).
Добавляем метод
Методы добавляются очень просто. Вот пример:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="jquery.pack.js"></script> </head> <body> <script type="text/javascript"> $(document).ready(function() { $.fn.showAlert = function() { alert('Не нажимай больше!'); return this; } }); </script> <a href="javascript:void(0);" onClick="$(this).showAlert(); return false;">Нажми</a> </body> </html>
Здесь мы использовали конструкцию
$.fn.имя_нового_метода = function() { … }
для добавления нашего нового метода.
Еще один интересный момент в этом примере – это использование return this в конце метода. Эта конструкция возвращает объект, над которым происходит манипуляция для дальнейших воздействий на него. Другими словами это реализация того самого механизма цепочек, про который шла речь в обзорной статье этого фреймворка. В дальнейшем это позволяет нам сделать что-то вроде этого:
$(this)->showAlert()->hide();
Параметры для метода
Идем дальше. Вполне возможно, что Вы будете писать по истине крутой плагин, в котором будет не обойтись без передачи параметров в методы. Можно сделать и так, и даже больше – в jQuery есть поддержка параметров по-умолчанию.
Чтобы не быть голословным, расширю функционал предыдущего примера:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="jquery.pack.js"></script> </head> <body> <script type="text/javascript"> $(document).ready(function() { $.fn.showAlert = function(options) { // задаем значения по-умолчанию var settings = {text : 'Не нажимай больше!'}; // расширяем или обновляем набор с учетом полученных аргументов settings = $.extend(settings, options); alert(settings.text); return this; } }); </script> <a href="javascript:void(0);" onClick="$(this).showAlert({text:'Hello'}); return false;">Нажми</a> </body> </html>
Механизм опций по-умолчанию реализуется специальным методом $.extend, которому первым параметром передается массив значений по-умолчанию, а во втором – параметры, которые были переданы методу. Если extend находит в обоих массивах элемент с одинаковыми элементами, то перезаписывает значение по-умолчанию – новым, а если не находит, то добавляет новые параметры в список.
С помощью метода extend можно не только расширять наборы параметров, но и расширять само ядро jQuery. Для этого нужно немного изменить способ вызова этого метода:
$.fn.extend({ check : function() { ... }, uncheck : function() { ... }, toggleCheck : function() { ... } });
Так можно заменить поведение некоторых методов jQuery, например.
И даже этим функциональность метода extend не ограничивается. Метод extend позволяет вам добавлять свои селекторы, но это уже скорее для знатоков javascript (нужно будет покопаться в исходнике jQuery, чтобы что-то нормальное написать).
Если Вы загляните (может уже заглядывали?) в исходный код jQuery, то увидите, что больше половины функциональности библиотеки довешивается именно этим методом. Другими словами, метод extend, действительно оправдывает свое название (в переводе с англ. Extend – “расширять”).
Aliases
В чужих скриптах на jQuery можно часто встретить различные вызовы этой библиотеки: кто-то использует знак $, а кто-то и jQuery целиком пишет. Теоретически, вы можете задать свое обозначение для вызова. Единственное правило – имя должно быть валидным именем javascript-переменной.
Все имена, кроме jQuery являются альясами, так как определяют тот же самый объект, что и jQuery.
Для того, чтобы использовать какой-то другой альяс для имени jQuery можно сделать так:
(function(myjQuery) { // здесь можно использовать вместо jQuery myjQuery })(jQuery);
Поэтому, если внутри плагина Вы хотите использовать другое имя, то можете спокойно это делать, используя пример выше.
Другое место, где можно использовать альясы для jQuery, кроме файла вашего плагина – это обычная веб-страница, которая содержит jQuery – код.
Делаете так:
jQuery(function(myjQuery) { // здесь уже можно использовать myjQuery вместо jQuery });
И используете альяс, который вам угодно и на странице.
Вот в принципе и все инструменты, которые представлены в jQuery для расширения ее возможностей (исчерпывающие я думаю). Так что, пользуйтесь и не забывайте заглядывать в исходник jQuery – это еще больше расширит ваши возможности в работе с jQuery.
Удачи.
Читайте также:
Алиасы - причём здесь расширения?
И статья далеко не исчерпывающая, а как же свои псевдоселекторы, например?