jQuery.query

13.02.2012
@LEXXX_NF

Я долго искал javascript-библиотечку, которая бы умела работать с многомерными массивами в GET-параметрах. У меня, например, был фильтр по параметрам примерно такого вида:

?filter[lang][lang]=eng&filter[lang][level]=hi&q=search_string

В этот фильтр надо было добавлять параметры, удалять, изменять их и всё это на javascript’е. Плагин к jQuery, который называется jQuery.query, всё это умеет.

Возможности

Первое и главное, что умеет плагин — это парсить GET-параметры в массив.

var arr = $.query.get();

Можно получить конкретный параметр. Если этот параметр представляет собой массив, то функция вернёт массив.

var id = $.query.get( 'filter' );

Можно установить новые значения. Поддерживаются цепочки вызовов.

$.query.set( 'section', 5 ).set( 'action', 'do' );

Можно удалять параметры по одному или очистить все сразу.

$.query.remove( 'type' );
$.query.empty();

Чтобы свернуть массив обратно в строку, нужно сделать так:

var queryString = $.query.set( 'section', 5 ).toString();

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

$.query.load( '?'+$( '#form' ).serialize() );

Лично я предпочитаю сначала строку параметров распарсить в массив. Потом сделать нужные изменения с массивом и свернуть его обратно в строку.

Особенности

Есть у плагина несколько особенностей.

  • Параметры без значения, типа таких index.php?print, парсятся в массив как true. То есть массив будет таким: {"print": true}. На самом деле, это конечно не массив, а объект, но для нашей задачи это не принципиально.
  • Если попытаться присвоить параметру значение false, то он просто исчезнет. Ну а как еще? :)
  • Интересно парсятся массивы с целочисленными ключами. Например, такая строка index.php?f[2]=1&f[5]=2 распарсится в массив [undefined, undefined, 1, undefined, undefined, 2].

Основные моменты я осветил с этой заметке, но у плагина есть еще много параметров и разных особенностей работы, их можно посмотерть в официальном репозитории плагинов jQuery: http://archive.plugins.jquery.com/project/query-object.

Демо

Посмотреть на работу плагина вживую можно на сайте автора: http://test.blairmitchelmore.com/jquery.query/?name=jonathan&age=26

Там же можно скачать сам плагин: http://test.blairmitchelmore.com/jquery.query/jquery.query.js

#1
KaronatoR
23.06.2012 17:58
Привет!
Попробовал использовать...нифига не работает.
Что странно, в приведённом в статье примере тоже не работает. Может плагин не рабочий? =(
#2
@LEXXX_NF
24.06.2012 23:45
У меня плагин работает.
У автора на сайте по какой-то причине поломался jQuery - скрипт отдаётся не полностью.
А какая проблема у вас?

Писáть здесь