2012-01-23 36 views
1

给定一个包含绝对URL和字符串参数的字符串,使用JavaScript和/或MooTools替换参数值的最简单方法是什么?如何使用mooTools更改查询字符串的值?

例如

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

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

编辑

的URL不是当前窗口的location。它是一个包含字符串的变量。我只是想操纵这个字符串。

+1

http://mootools.net/docs/more/Types/String.QueryString虽然如果作为字符串操作,这是很难与任何图书馆 –

回答

0

如果您想在不重新加载页面的情况下执行此操作,则无法(这是Web浏览器安全模型的一部分)。 如果你不介意重新加载页面,可以考虑:

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

另一种无需重新加载正在使用的location.hash,即

location.hash = 'myhash' 

改变URL来http://example.com/foo/bar?frob=123456789#myhash

这是的基础Hash bang urls

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); 
} 

这是特定于我的用法,但它可能作为未来其他人的出发点。

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 

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

+0

很好,非常感谢! –

+0

不错的答案,简洁但也包含超过最低限度的信息! –

相关问题