jqGetVersion – систематизируем данные об версии jQuery

Пятница, 22 января 2010 года, 17:43. Напечатано в категориях JavaScript, jQuery, Сниппеты0

Вам приходилось когда нибудь в своих скриптах/плагинах проверять версию библиотеки jQuery?
Было удобно? Наверно нет :)

Немного сведений. Версия библиотеки jQuery хранится в jQuery.fn.jquery:

alert( 'На блоге VL.VG используется jQuery ' + jQuery.fn.jquery );

И хранится она в виде строки :)
А это значит, что проверка на нужную версию становится не очень удобной :(

Что же, у нас как всегда есть выход! :D
Достаточно нам всего лишь разложить строковой вариант версии на Major и Minor версии, а также узнать path-level и extra identifier :) Наверно непонятно, что предыдущее предложение означает? Давайте разберём на примере!

Представим, что у нашей jQuery версия 1.3.2pre2. Тогда:

Major version = 1
Minor version = 3
Path-level = 2
Extra identifier = pre2

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

var expr = /^([0-9]+)(?:\.([0-9]+)(?:\.([0-9]+))?)?([a-z0-9_-]+)?$/;
alert( '1.3.2pre2'.match( expr ) );

Ага! Строка 1.3.2pre2 разложилась правильно :)

И одно единственное последнее – нам осталось написать полноценный сниппет из полученных нами знаний :) Копирайт в начале скрипта написал от души :)
Итак, наш сниппет преобразует jQuery.fn.jquery из простой строки в объект-строку и добавляет к нему свойства major, minor, pathlevel, identifier:

/*
** jqGetVersion
** ---
** VERSION 0.0.1
** ---
** Сниппет для библиотеки jQuery.
** Создаёт в jQuery.fn.jquery расширенные данные об версии библиотеки
** Версии: major, minor pathlevel, identifier
** ---
** @example:
**   для jQuery 1.4: jQuery.fn.jquery = { major:1, minor:4, pathlevel:0 };
**   для jQuery 1.4a2pre: jQuery.fn.jquery = { major:1, minor:4, pathlevel:0, identifier:'a2pre' };
**   для jQuery 1.3.2: jQuery.fn.jquery = { major:1, minor:3, pathlevel:2 };
** ---
** @idea_from: Regent(http://vl.vg/22.01.2010/jq-get-version/)
** ---
** @author: Александр Кузнецов aka Regent(http://vl.vg/)
** ---
** @demo: http://vl.vg/wp-content/uploads/js/jqGetVersion/0.0.1/example.html
** ---
** @home_page: http://plugins.jquery.com/project/jq-get-version
** ---
** Dual licensed under the MIT and GPL licenses.
** - http://www.opensource.org/licenses/mit-license.php
** - http://www.gnu.org/copyleft/gpl.html
*/

if( window.jQuery ) jQuery.fn.jquery = (
  function(){
    var
      j = new String( jQuery.fn.jquery ),
      match = j.match( /^([0-9]+)(?:\.([0-9]+)(?:\.([0-9]+))?)?([a-z0-9_-]+)?$/ );
    j.major = parseInt( match[ 1 ] );
    j.minor = parseInt( match[ 2 ] ) || 0;
    j.pathlevel = parseInt( match[ 3 ] ) || 0;
    j.identifier = match[ 4 ];
    return j;
  }
)();


И как всегда, вот минимизированная версия:

/* Snippet jqGetVersion. Version 0.0.1
** Создаёт в jQuery.fn.jquery расширенные данные об версии библиотеки
** More -> http://vl.vg/22.01.2010/jq-get-version/
*/

if(window.jQuery){jQuery.fn.jquery=(function(){var b=new String(jQuery.fn.jquery),a=b.match(/^([0-9]+)(?:\.([0-9]+)(?:\.([0-9]+))?)?([a-z0-9_-]+)?$/);b.major=parseInt(a[1]);b.minor=parseInt(a[2])||0;b.pathlevel=parseInt(a[3])||0;b.identifier=a[4];return b})()};

Это же минимизированная версия сниппета, поэтому копирайтов уменьшил :P

Как использовать сниппет после внедрения в страницу? Ну например вот так:

if( jQuery.fn.jquery.major >= 1 && jQuery.fn.jquery.minor >= 4 )
  alert( 'Вы используете версию jQuery, в которой обновлён метод index ;)' );
А вот ссылочки:
Смотреть демо
Скачать архим с примером
Cтраница сниппета на Plugins.jQuery.com

Уведомлять меня о новых комментариях по почте
Для корректной работы отправки комментариев необходимо включить JavaScript
Либо скачать новый нормальный браузер