jQuery.query
Я долго искал 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
Попробовал использовать...нифига не работает.
Что странно, в приведённом в статье примере тоже не работает. Может плагин не рабочий? =(
У автора на сайте по какой-то причине поломался jQuery - скрипт отдаётся не полностью.
А какая проблема у вас?