Как использовать параметры без значений с плагином jQuery BBQ? - PullRequest
0 голосов
/ 05 ноября 2011

Мне нужно определить и прочитать хеш-значения, например

#page1&filter=1-1-0 
#filter=1-1-0 (if page number is omitted)
#page1 (if filter is not defined)

Т.е. номер страницы будет частью параметра и будет без значения.Как работать (получить и установить) с такими параметрами?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2011

Вы можете получить доступ к содержимому строки после хэша в URL с помощью window.location.hash.

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

function getParameters(){
    params = {}
    var keyValuePairs = window.location.hash.substr(1).split('&');
    for (x in keyValuePairs){
        var split = keyValuePairs[x].split('=', 2);
        params[split[0]] = (split[1]) ? decodeURI(split[1]) : "";
    }
    return params;
}

function setParameters(key, value){
    var params = getParameters();
    params[key] = value;
    var hashString = ""
    for (x in params){
        if (params[x]){
            hashString += "&" + x + "=" + encodeURI(params[x]);
        } else {
            hashString += "&" + x;
        }
    }
    window.location.hash = hashString.substr(1);
}

Вы можете прочитать параметр «filter» для чтения следующим образом:

var parameters = getParameters();
console.log(parameters.filter);
0 голосов
/ 06 ноября 2011

Вот решение с использованием плагина BBQ ( demo ):

var hash = $.deparam.fragment();
var page = 'page1';
$.each(hash, function(i, val) {
    if (i.indexOf('page') != -1) page = i;
});
var filter = (hash.filter==undefined) ? '0-0-0' : hash.filter;

// update hash
$.bbq.pushState('#' + page + '&filter=' + filter);
...