В дополнение к тому, что вы сделали, это может быть лучше, поскольку оно будет расширяться 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/