给定一个包含带有querystring参数的绝对URL的字符串,使用JavaScript和/或MooTools替换参数值的最简单方法是什么?
e.g。
// Change this
'/foo/bar?frob=123456789'
// Into this
'/foo/bar?frob=abcdefg'
修改
网址不是当前窗口的location
。它是一个包含字符串的变量。我只是想操纵这个字符串。
答案 0 :(得分:3)
除了你所做的,这可能会更好,因为它将扩展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
答案 1 :(得分:1)
很抱歉碰到一个旧帖子,但我认为它已经在mootools了。无需自己编写:-) http://mootools.net/docs/more/Types/URI#URI:setData
如果您使用的是非常旧版本的mootools,请查看此处:http://pilon.nl/mootools/2009/02/05/extra-browsersextras/
答案 2 :(得分:0)
如果您想在不重新加载页面的情况下执行此操作,则无法(这是Web浏览器安全模型的一部分)。 如果您不介意重新加载页面,请考虑:
location.href='http://example.com/foo/bar?frob=baz'
没有重新加载的替代方法是使用location.hash,即
location.hash = 'myhash'
的基础
答案 3 :(得分:0)
这是我提出的解决方案。这取决于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);
}
这是我的用法特有的,但它可能会成为未来其他人的起点。