Как я могу изменить значение строки запроса с помощью mooTools? - PullRequest
1 голос
/ 23 января 2012

Учитывая строку, содержащую абсолютный URL с параметром строки запроса, как проще всего заменить значение параметра с помощью JavaScript и / или MooTools?

например,

// Change this
'/foo/bar?frob=123456789'

// Into this
'/foo/bar?frob=abcdefg'

РЕДАКТИРОВАТЬ

URL-адрес не является location текущего окна.Это переменная, содержащая строку.Я просто хочу манипулировать этой строкой.

Ответы [ 4 ]

3 голосов
/ 23 января 2012

В дополнение к тому, что вы сделали, это может быть лучше, поскольку оно будет расширяться String и устраняет зависимость от класса URI ...

(function() {

// deps on Types/String.toQueryString()
String.implement({

    fixQueryString: function(key, value) {
        var query = this.parseQueryString() || {};
        query[key] = value;
        return Object.toQueryString(query);
    }

});

// exports:
this.replaceUrlParameter = function(url, key, value) {
    var parts = url.split('?'), QS = parts[1] || null;

    return QS ? [parts[0], QS.fixQueryString(key, value)].join("?") : url;
};

})();

console.log(replaceUrlParameter('/foo/bar', 'frob', 'ownies'));
/foo/bar/
console.log(replaceUrlParameter('/foo/bar?frob=123123123', 'frob', 'ownies'));
/foo/bar?frob=ownies

http://jsfiddle.net/dimitar/fjj6W/

1 голос
/ 31 января 2012

Извините, что ударил старый пост, но я думаю, что он уже в mootools.Не нужно писать самому :-) http://mootools.net/docs/more/Types/URI#URI:setData

Или посмотрите здесь, если у вас очень старая версия mootools: http://pilon.nl/mootools/2009/02/05/extra-browsersextras/

0 голосов
/ 23 января 2012

Это решение, которое я придумал.Это зависит от MooTools.

function replaceUrlParameter (url, parameterName, newValue) {
    var uri = new URI(url);
    var uriBase = ri.get('directory') + uri.get('file');
    var query = uri.get('query').parseQueryString(false, true);
    query[parameterName] = newValue;

    uriBase += '?';
    for (var i in query) {
        if (i === 'undefined') continue;
        if (i === '') continue;
        uriBase += i + '=' + escape(query[i]) + '&';
    }
    return uriBase.substring(0, galleryLinkBase.length - 1);
}

Это характерно для моего использования, но может послужить отправной точкой для других в будущем.

0 голосов
/ 23 января 2012

Если вы хотите сделать это без перезагрузки страницы, это невозможно (это является частью модели безопасности веб-браузера).Если вы не возражаете перезагрузить страницу, подумайте:

location.href='http://example.com/foo/bar?frob=baz'

Альтернативой без перезагрузки является использование location.hash, то есть

location.hash = 'myhash'

, чтобы изменить URL-адрес на http://example.com/foo/bar?frob=123456789#myhash

Это основа URL хеш-бэгов

...